Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Wat zijn de verschillen tussen @GenerateMocks en @GenerateniceMocks


Wat zijn de verschillen tussen @GenerateMocks en @GenerateniceMocks


De annotaties `@generatemocks` en`@generatenicemocks` worden gebruikt om nepklassen te genereren voor eenheidstests in dart- en flutter -toepassingen. Hoewel beide annotaties hetzelfde primaire doel dienen, verschillen ze aanzienlijk in hun gedrag bij het verwerken van niet -ingebouwde methodeoproepen.

@generatemocks

- Gedrag voor niet -ingebouwde methoden: wanneer een methode wordt aangeroepen op een mockobject dat is gegenereerd met `@generatemocks` en er is geen stomp gedefinieerd voor die methode, zal Mockito een uitzondering geven. Dit gedrag zorgt ervoor dat u expliciet stomps definieert voor alle methoden die naar verwachting tijdens een test worden opgeroepen, waardoor potentiële toezicht op de testopstelling wordt opgevangen.

- Gebruik: deze annotatie wordt meestal gebruikt wanneer u strikte controle wilt over het gedrag van uw mocks, zodat alle onverwachte methode -oproepen onmiddellijk als fouten worden gemarkeerd.

- Afschrijvingstatus: `@generatemocks` wordt als minder aanbevolen beschouwd in vergelijking met`@generatenicemocks` vanwege het strikte gedrag, wat kan leiden tot meer uitgebreide testcode als het niet zorgvuldig wordt beheerd.

@GenerateniceMocks

- Gedrag voor niet -ingebouwde methoden: daarentegen, mocks gegenereerd met `@generatenicemocks` zullen een standaard, juridische waarde voor het retourtype van de methode retourneren wanneer een niet -ingebouwde methode wordt aangeroepen. Deze standaardwaarde is niet bedoeld voor gebruik in de testlogica, maar dient om runtime -fouten te voorkomen vanwege nul- of ontbrekende waarden.

- Gebruik: deze annotatie wordt aanbevolen voor de meeste use cases omdat het het schrijven van het test vereenvoudigt door de noodzaak om elke mogelijke methodeaanroep te verminderen te verminderen. Het maakt tests robuuster door fouten te vermijden vanwege vergeten stubs.

- Aanvullende functies: `@generatenicemocks` maakt het alleen 'mockspec' in de argumentlijst mogelijk, waardoor meer flexibiliteit wordt geboden bij het aanpassen van de gegenereerde mockklassen. U kunt bijvoorbeeld een aangepaste naam opgeven voor de Mock -klasse met behulp van de parameter 'As' in 'mockspec'.

Belangrijkste verschillen

1. Handeling van niet -ingebouwde methoden: het belangrijkste verschil is hoe elke annotatie methode behandelt zonder expliciete stubs. `@Generatemocks` gooit een uitzondering, terwijl`@generatenicemocks` een standaardwaarde retourneert.

2. Code eenvoud en robuustheid: `@generatenicemocks` leidt over het algemeen tot eenvoudiger en robuustere testcode door de behoefte aan uitputtende stomp te verminderen.

3. Aanpassing: `@generatenicemocks` biedt meer aanpassingsopties via` mockspec`, waardoor aangepaste mock -klassennamen en andere geavanceerde configuraties mogelijk zijn.

Samenvattend heeft `@generatenicemocks` over het algemeen de voorkeur vanwege het vermogen om de testcode te vereenvoudigen en fouten te verminderen vanwege niet -ingebouwde methoden, terwijl`@generatemocks` een strengere aanpak biedt die nuttig kan zijn in specifieke scenario's waar expliciete controle over nepgedrag vereist is [1] [4] [11] [11].

Citaten:
[1] https://www.amaysim.technology/blog/flutter-test-mockito-generatemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_handwitten_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-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-contains-which-Appears-to-Already-be-Mocked
[11] https://pub.dev/packages/mockito