Anotácie `@generateMocks` a`@GenerateNicemmocks 'v Mockito sa používajú na generovanie falošných kurzov na testovanie jednotiek v aplikáciách DART a Flutter. Zatiaľ čo obe anotácie slúžia rovnakému primárnemu účelu, pri manipulácii s unstáľovými metódami sa výrazne líšia.
@GenerateMocks
- Správanie pre unsubbed metódy: Keď sa metóda volá na falošné objekty generované s `@generateMocks 'a pre túto metódu nebol definovaný žiadny útržok, Mockito hodí výnimku. Toto správanie zaisťuje, že ste výslovne definovali plôch pre všetky metódy, ktoré sa očakávajú, že sa budú volať počas testu, čo pomáha zachytiť potenciálne dohľady v nastavení testu.
- Použitie: Táto anotácia sa zvyčajne používa, keď chcete prísnu kontrolu nad správaním svojich falošných škôl, čím sa zabezpečí, že akékoľvek neočakávané hovory metódy sa okamžite označia ako chyby.
- Stav odpisu: `@GenerateMocks sa považuje za menej odporúčanú v porovnaní s`@generatenocemocks 'kvôli jeho prísnemu správaniu, čo môže viesť k podrobnejšiemu testovaciemu kódu, ak nie je starostlivo spravovaný.
@GenerateNicemocks
- Správanie sa pre unsubbed metódy: Naopak, falošné sú vygenerované s `@generateNicemmocks` vráti predvolenú, právnu hodnotu pre typ návratu metódy, keď sa volá neuznávaná metóda. Táto predvolená hodnota nie je určená na použitie v logike testu, ale slúži na zabránenie chýb runtime v dôsledku nulových alebo chýbajúcich hodnôt.
- Použitie: Táto anotácia sa odporúča pre väčšinu prípadov použitia, pretože zjednodušuje písanie testov znížením potreby stručať každé možné volanie metódy. Testy robia robustnejšie tým, že sa vyhýbajú zlyhaniam v dôsledku zabudnutých útržkov.
- Ďalšie funkcie: `@GenerateNicEMOCKs 'umožňuje iba„ MockSpec'sss vo svojom zozname argumentov, čo poskytuje väčšiu flexibilitu pri prispôsobovaní generovaných falošných tried. Napríklad môžete zadať vlastný názov pre falošnú triedu pomocou parametra „ako“ v `MockSpec`.
Kľúčové rozdiely
1. SPRÁVKA NA NESPRÁVNE METÓDY: Najvýznamnejším rozdielom je spôsob, akým každá anotácia zaobchádza s metódou volania bez explicitných plôch. `@GenerateMocks` vyvolá výnimku, zatiaľ čo`@generateNicEmocks 'vracia predvolenú hodnotu.
2. Jednoduchosť a robustnosť kódu: `@GenerateNicemmocks 'vo všeobecnosti vedie k jednoduchšiemu a robustnejšiemu testovaciemu kódu znížením potreby vyčerpávajúceho strhbingu.
3. Prispôsobenie: `@GenerateNicEmocks 'ponúka viac možností prispôsobenia prostredníctvom„ MockSpec`, čo umožňuje vlastné názvy falošných tried a ďalšie pokročilé konfigurácie.
Stručne povedané, `@GenerateNicEMOCKs 'sa vo všeobecnosti uprednostňuje pre svoju schopnosť zjednodušiť testovací kód a znižovať chyby v dôsledku neutkaných metód, zatiaľ čo`@generateMocks' poskytuje prísnejší prístup, ktorý môže byť užitočný v konkrétnych scenároch, kde je potrebná explicitná kontrola falošného správania [1] [11].
Citácie:[1] https://www.amaysim.technology/blog/flutter-test-mocko-generatemocks-vs-generatenocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwritten_mocks/
[3] https://blog.logoclect.com/unit-testing-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenocemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-note-generated-mock-class
[7] https://github.com/dart-gang/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lang/mockito/issues/367
[9] https://github.com/dart-lang/mockito/issues/422
[10] https://stackoverflow.com/questions/74406977/the-geneneratemocks-annotation-contains-a-class-class-which-plears-to-already-already-becked
[11] https://pub.dev/packages/Mockito