`@Generatemocks` och`@generatenicemocks` kommentarer i mockito används för att generera mock -klasser för enhetstest i DART- och fladderapplikationer. Medan båda kommentarerna tjänar samma primära syfte, skiljer de sig väsentligt i sitt beteende när de hanterar ostubbade metodsamtal.
@generatemocks
- Beteende för ostubbade metoder: När en metod kallas på ett håligt objekt som genereras med `@generatemocks` och ingen stubb har definierats för den metoden, kommer Mockito att kasta ett undantag. Detta beteende säkerställer att du uttryckligen definierar stubbar för alla metoder som förväntas kallas under ett test, vilket hjälper till att fånga potentiella övervakningar i testinställningen.
- Användning: Denna kommentar används vanligtvis när du vill ha strikt kontroll över beteendet hos dina håliga, vilket säkerställer att alla oväntade metodsamtal omedelbart flaggas som fel.
- Avskrivningsstatus: `@Generatemocks` anses vara mindre rekommenderad jämfört med`@generatenicemocks` på grund av dess strikta beteende, vilket kan leda till mer verbos testkod om inte hanteras noggrant.
@generatenicemocks
- Beteende för ostubbade metoder: Däremot kommer Mocks genererade med `@Generatenicemocks` att returnera ett standard, juridiskt värde för metodens returtyp när en ostubbad metod kallas. Detta standardvärde är inte avsett för användning i testlogiken men tjänar till att förhindra runtime -fel på grund av noll eller saknade värden.
- Användning: Denna kommentar rekommenderas för de flesta användningsfall eftersom det förenklar testskrivningen genom att minska behovet av att stubba alla möjliga metodsamtal. Det gör tester mer robusta genom att undvika misslyckanden på grund av glömda stubbar.
- Ytterligare funktioner: `@Generatenicemocks` tillåter bara 'MockSpec' i sin argumentlista, vilket ger mer flexibilitet när det gäller att anpassa de genererade håliga klasserna. Till exempel kan du ange ett anpassat namn för Mock -klassen med parametern "As" i "MockSpec".
Nyckelskillnader
1. Hantering av ostubbade metoder: Den viktigaste skillnaden är hur varje kommentering hanterar metoden samtal utan uttryckliga stubbar. `@Generatemocks` kastar ett undantag, medan`@generatenicemocks 'returnerar ett standardvärde.
2. Kodens enkelhet och robusthet: ``@generatenicemocks` leder i allmänhet till enklare och mer robust testkod genom att minska behovet av uttömmande stubbning.
3. Anpassning: `@Generatenicemocks` erbjuder fler anpassningsalternativ genom` MockSpec`, vilket möjliggör anpassade håliga klassnamn och andra avancerade konfigurationer.
Sammanfattningsvis föredras "`@generatenicemocks "i allmänhet för sin förmåga att förenkla testkoden och minska fel på grund av oskattade metoder, medan`@generatemocks` ger en striktare metod som kan vara användbar i specifika scenarier där uttryckliga kontroll över håliga beteende krävs [1] [4] [11].
Citeringar:[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-flutter-mocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-genererad-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
]
[11] https://pub.dev/packages/mockito