`@Generatemocks` og`@generatenicemocks` -merknadene i mockito brukes til å generere hånklasser for enhetstesting i DART- og FLUTT -applikasjoner. Mens begge merknadene tjener det samme primære formålet, skiller de seg betydelig i oppførselen når de håndterer ustubbet metodeanrop.
@generatemocks
- Atferd for ustubbet metoder: Når en metode blir kalt på et hånlig objekt generert med `@generatemocks` og ingen stubb er blitt definert for den metoden, vil Mockito kaste et unntak. Denne oppførselen sikrer at du eksplisitt definerer stubber for alle metoder som forventes å bli kalt under en test, og bidrar til å fange potensielle tilsyn i testoppsettet.
- Bruk: Denne merknaden brukes vanligvis når du vil ha streng kontroll over atferden til håpene dine, og sikrer at eventuelle uventede metodesamtaler umiddelbart blir flagget som feil.
- Avskrivningsstatus: `@generatemocks` anses som mindre anbefalt sammenlignet med`@generatenicemocks` på grunn av dens strenge oppførsel, noe som kan føre til mer ordrestestekode hvis ikke administrert nøye.
@generatenicemocks
- Atferd for ustubbet metoder: I motsetning til dette, vil hån generert med `@Generatenicemocks` returnere en standard, juridisk verdi for metodens returtype når en ustubbet metode kalles. Denne standardverdien er ikke beregnet for bruk i testlogikken, men tjener til å forhindre runtime -feil på grunn av null eller manglende verdier.
- Bruk: Denne merknaden anbefales for de fleste brukssaker fordi den forenkler testskriving ved å redusere behovet for å stubbe alle mulige metodesamtaler. Det gjør tester mer robuste ved å unngå feil på grunn av glemte stubber.
- Tilleggsfunksjoner: `@Generatenicemocks` tillater bare` MockSpec`s i sin argumentliste, og gir mer fleksibilitet i å tilpasse de genererte hånklassene. For eksempel kan du spesifisere et tilpasset navn for hånklassen ved å bruke `as` -parameteren i` mockpec`.
viktige forskjeller
1. Håndtering av ustubbet metoder: Den viktigste forskjellen er hvordan hver merknad håndterer metodeanrop uten eksplisitte stubber. `@Generatemocks` kaster et unntak, mens`@Generatenicemocks` returnerer en standardverdi.
2. Kode enkelhet og robusthet: `@generatenicemocks` fører generelt til enklere og mer robust testkode ved å redusere behovet for uttømmende stubbing.
3. Tilpasning: `@Generatenicemocks` tilbyr flere tilpasningsalternativer gjennom` MockSpec`, noe som gir mulighet for tilpassede hånnavn og andre avanserte konfigurasjoner.
Oppsummert er `@generatenicemocks` generelt foretrukket for sin evne til å forenkle testkoden og redusere feil på grunn av ustubbet metoder, mens`@generatemocks` gir en strengere tilnærming som kan være nyttig i spesifikke scenarier der eksplisitt kontroll over hånlig oppførsel er nødvendig [1] [4] [11].
Sitasjoner:[1] https://www.aamaysim.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-cocks
[6] https://stackoverflow.com/questions/72390220/flutter-generatemocks-is-not-generert-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-which--uffears-to-aleary-be-cocked
[11] https://pub.dev/packages/mockito