A `@generatemocks` és a`@@generatenicemocks "kommentárokat a Mockito -ban használják a dart és a Flutter alkalmazások egységvizsgálatához szükséges modellek előállítására. Noha mindkét kommentár ugyanazt az elsődleges célt szolgálja, viselkedésükben jelentősen különböznek a nem megfelelő módszerhívások kezelése során.
@generatemocks
- A nem szubsztrált módszerek viselkedése: Ha egy módszert hívnak fel a „@@generatemocks” -val generált modell objektumra, és nem határoztak meg Stub -t erre a módszerre, a Mockito kivételt dob. Ez a viselkedés biztosítja, hogy kifejezetten meghatározza a csonkokat minden olyan módszernél, amelyet várhatóan egy teszt során hívnak meg, és elősegítik a potenciális felügyeletet a teszt beállításában.
- Használat: Ezt a megjegyzést általában akkor használják, amikor szigorú ellenőrzést szeretne a gúnyok viselkedése felett, biztosítva, hogy a váratlan módszerhívások azonnal hibaként jelöljenek meg.
- Értékesítési állapot: A `@generatemocks` kevésbé ajánlottnak tekinthető a„@generatenicemocks ”-hez képest szigorú viselkedése miatt, ami több szóbeli tesztkódhoz vezethet, ha nem kezelik gondosan.
@generatenicemocks
- A meg nem szőtt módszerek viselkedése: Ezzel szemben a „@@generatenicemocks” -val generált gúnyolódások alapértelmezett, jogi értéket adnak vissza a módszer visszatérési típusához, ha egy nem bebontott módszert hívnak. Ezt az alapértelmezett értéket nem a teszt logikájában való felhasználásra szánják, hanem a null vagy hiányzó értékek miatti futási hibák megakadályozására szolgál.
- Használat: Ez a kommentár a legtöbb felhasználási esethez ajánlott, mivel egyszerűsíti a teszt írását azáltal, hogy csökkenti az összes lehetséges módszerhívás elhelyezésének szükségességét. Ez a teszteket robusztusabbá teszi az elfelejtett csonkok miatti kudarcok elkerülésével.
- További funkciók: A `@generatenicemocks` csak a „MockSpec” -et engedélyezi az érvlistájában, nagyobb rugalmasságot biztosítva a generált modell osztályok testreszabásában. Például megadhatja a MOCK osztály egyedi nevét a „As” paraméter segítségével a `mockspec” -ben.
kulcsfontosságú különbségek
1. A nem szubsztrált módszerek kezelése: A legjelentősebb különbség az, hogy az egyes kommentárok hogyan kezelik a módszert kifejezett csonkok nélkül. A `@Generatemocks` kivételt vet fel, míg a`@GeneratenicEmocks 'alapértelmezett értéket ad vissza.
2. A kód egyszerűség és robusztusság: `@generatenicemocks" általában egyszerűbb és robusztusabb tesztkódhoz vezet, azáltal, hogy csökkenti a kimerítő daganat szükségességét.
3. Testreszabás: A `@GeneratenicEmocks" több testreszabási lehetőséget kínál a „MockSpec” segítségével, lehetővé téve az egyedi modell -osztály nevét és más fejlett konfigurációkat.
Összefoglalva: a „@generatenicemocks” általában előnyben részesíti a tesztkód egyszerűsítésére és a nem megfelelő módszerek miatti hibák csökkentésére való képességét, míg a `@generatemocks` szigorúbb megközelítést biztosít, amely hasznos lehet olyan konkrét forgatókönyvekben, ahol kifejezetten ellenőrzésre van szükség a modell viselkedése felett [1] [4] [11].
Idézetek:[1] https://www.amaysim.technology/blog/flutter-stest-mockito-genemocks-vs-genenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwritten_mocks/
[3] https://blog.lockocket.com/unit-stesting-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-class.html
[5] https://plugins.jetbrains.com/plugin/23513-generate-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-generated-mock-class
[7] https://github.com/dart-lang/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-generatemocks-annotation-contains-a-class-wich-pears-to-already-be-mocked
[11] https://pub.dev/packages/mockito