Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvad er forskellene mellem @Generatemocks og @Generatenicemocks


Hvad er forskellene mellem @Generatemocks og @Generatenicemocks


`@Generatemocks` og`@generatenicemocks 'kommentarer i Mockito bruges til at generere mock -klasser til enhedstest i DART- og Flutter -applikationer. Mens begge kommentarer tjener det samme primære formål, adskiller de sig markant i deres opførsel, når de håndterer ustubbede metodeopkald.

@generatemocks

- Adfærd for ikke -stubbede metoder: Når en metode kaldes på en mock -objekt genereret med `@generatemocks` og ingen stub er defineret til denne metode, vil Mockito kaste en undtagelse. Denne opførsel sikrer, at du eksplicit definerer stubber til alle metoder, der forventes at blive kaldt under en test, hvilket hjælper med at fange potentielle oversigter i testopsætning.

- Anvendelse: Denne annotation bruges typisk, når du ønsker streng kontrol over opførelsen af ​​dine spotter, hvilket sikrer, at eventuelle uventede metodeopkald straks markeres som fejl.

- Afskrivningsstatus: `@Generatemocks` betragtes som mindre anbefalet sammenlignet med`@generatenicemocks` på grund af dens strenge opførsel, hvilket kan føre til mere ordret testkode, hvis det ikke styres omhyggeligt.

@generatenicemocks

- Adfærd for ikke -stubbede metoder: I modsætning hertil returnerer hån genereret med `@generatenicemocks` en standard, juridisk værdi for metodens returtype, når der kaldes en ustubbet metode. Denne standardværdi er ikke beregnet til brug i testlogikken, men tjener til at forhindre runtime -fejl på grund af nul eller manglende værdier.

- Anvendelse: Denne annotation anbefales til de fleste brugssager, fordi den forenkler testskrivning ved at reducere behovet for at stubbe alle mulige metodeopkald. Det gør test mere robust ved at undgå fejl på grund af glemte stubber.

- Yderligere funktioner: `@Generatenicemocks` tillader kun` MockSpecs på sin argumentliste, hvilket giver mere fleksibilitet i tilpasning af de genererede mock -klasser. For eksempel kan du specificere et brugerdefineret navn til Mock -klassen ved hjælp af 'AS' -parameteren i 'MockSpec'.

Nøgleforskelle

1. Håndtering af ustubbet metoder: Den mest markante forskel er, hvordan hver annotation håndterer metodeopkald uden eksplicitte stubber. `@Generatemocks` kaster en undtagelse, mens`@generatenicemocks` returnerer en standardværdi.

2. Kode enkelhed og robusthed: `@generatenicemocks` fører generelt til enklere og mere robust testkode ved at reducere behovet for udtømmende stubbing.

3. Tilpasning: `@generatenicemocks` tilbyder flere tilpasningsmuligheder gennem` MockSpec`, hvilket giver mulighed for tilpassede mock -klassenavne og andre avancerede konfigurationer.

Sammenfattende foretrækkes '@generatenicemocks' generelt for sin evne til at forenkle testkode og reducere fejl på grund af ustubbede metoder, mens `@generatemocks 'giver en strengere tilgang, der kan være nyttig i specifikke scenarier, hvor eksplicit kontrol over mock adfærd er påkrævet [1] [4] [11].

Citater:
[1] https://www.amaysim.technology/blog/flutter-test-mockito-generatemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments/ua0hps/generated_vs_hand skrevet_mocks/
[3] https://blog.logrocket.com/unit-test-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/generatenicemocks-lass.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-amnotation-contains-a-class-which-wopears-to-roadleady-be-mocked
[11] https://pub.dev/packages/mockito