Pripombe `@generateMocks` in`@generatenicemocks` v Mockito se uporabljajo za ustvarjanje posmeh za testiranje enot v aplikacijah Dart in Flutter. Medtem ko obe pripisi služita enakemu primarni namenu, se pri ravnanju z neizkoračenimi metodami bistveno razlikujeta v svojem vedenju.
@GenateMocks
- Obnašanje za neobremenjene metode: Ko je metoda poklicana na posmeh, ustvarjen z `@generateMocks" in za to metodo ni opredeljen noben škrlat, bo Mockito vrgel izjemo. To vedenje zagotavlja, da izrecno definirate škrbine za vse metode, ki naj bi jih med testom poklicali, kar pomaga pri ujemanju potencialnih pregledov pri nastavitvi testa.
- Uporaba: Ta pripombe se običajno uporablja, kadar želite strog nadzor nad obnašanjem vaših posmehov in tako zagotoviti, da se kakršni koli nepričakovani klici metode takoj označijo kot napake.
- Status amortikcije: `@generatemocks` se zaradi strogega vedenja šteje za manj priporočljivo v primerjavi s`@GenerateniceMocks ", kar lahko privede do bolj dobesedne preskusne kode, če je ne upravljate skrbno.
@GenateniceMocks
- Obnašanje za neobdelane metode: V nasprotju s tem bodo posmeh, ustvarjene z `@generatenicemocks`, vrnile privzeto, zakonsko vrednost za vrsto vrnitve metode, ko se pokliče nečutna metoda. Ta privzeta vrednost ni namenjena uporabi v testni logiki, vendar služi za preprečevanje napak v času izvajanja zaradi ničelnih ali manjkajočih vrednosti.
- Uporaba: Ta pripomba je priporočljiva za večino primerov uporabe, ker poenostavi preskusno pisanje z zmanjšanjem potrebe po zagonu vsakega možnega klica metod. Testi naredijo bolj robustne z izogibanjem okvarami zaradi pozabljenih škrbin.
- Dodatne funkcije: `@GenerateniceMocks` omogoča le` MockSpec's na seznamu argumentov, kar zagotavlja večjo prilagodljivost pri prilagajanju ustvarjenih razredov. Na primer, lahko določite ime po meri za posmeh s pomočjo parametra "kot" v "Mocksspec".
Ključne razlike
1. Ravnanje z neobdelanimi metodami: Najpomembnejša razlika je v tem, kako vsaka pripomba obdeluje metodo, ki kliče brez izrecnih škrbin. `@GenerateMocks` vrže izjemo, medtem ko`@GenerateniceMocks` vrne privzeto vrednost.
2. Enostavnost in robustnost kode: `@generatenicemocks` na splošno vodi do enostavnejše in močnejše preskusne kode z zmanjšanjem potrebe po izčrpnem trku.
3. Prilagoditev: `@GenerateniceMocks` ponuja več možnosti prilagajanja prek` MockSpec`, kar omogoča imena razredov po meri in druge napredne konfiguracije.
Če povzamemo, je "@generateniceMocks" na splošno prednostna zaradi svoje sposobnosti poenostavitve preskusne kode in zmanjšanja napak zaradi neobremenjenih metod, medtem ko "@GenemateMocks" zagotavlja strožji pristop, ki je lahko uporaben v določenih scenarijih, kjer je potreben izrecni nadzor nad posmehom [1] [4] [11].
Navedbe:[1] https://www.amaysim.technology/blog/flutter-test-mockito-generatemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwritten_mocks/
[3] https://blog.logrocket.com/unit-testing-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flotter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generateMocks-is-not-generated-mack-class
[7] https://github.com/dart-lang/mockito/blob/master/null_safety_readme.md
[8] https://github.com/dart-lang/mockito/isissue/367
[9] https://github.com/dart-lang/mockito/isissue/422
[10] https://stackoverflow.com/questions/74406977/the-generateMocks-annotation-contains-a-class-which-appears-to-already-be-mocked
[11] https://pub.dev/packages/mockito