Le annotazioni `@Genetatemocks` e@GenerateniceMocks in mockito vengono utilizzate per generare classi simulate per il test unitario in applicazioni Dart e Flutter. Mentre entrambe le annotazioni hanno lo stesso scopo primario, differiscono significativamente nel loro comportamento quando si gestiscono le chiamate del metodo non stuzzicato.
@generatemocks
- Comportamento per metodi non stugged: quando un metodo viene chiamato su un oggetto simulato generato con `@Generatemocks` e nessuno stub è stato definito per quel metodo, Mockito lancerà un'eccezione. Questo comportamento ti garantisce di definire esplicitamente gli stub per tutti i metodi che dovrebbero essere chiamati durante un test, contribuendo a catturare potenziali sviste nella configurazione dei test.
- Utilizzo: questa annotazione viene generalmente utilizzata quando si desidera un controllo rigoroso sul comportamento delle tue beffe, garantendo che eventuali chiamate di metodo impreviste vengano immediatamente contrassegnate come errori.
- Stato di deprecazione: `@Generatemocks` è considerato meno raccomandato rispetto a`@generatenicemocks` a causa del suo comportamento rigoroso, che può portare a un codice di prova più verbosio se non gestito con attenzione.
@GenerateniceMocks
- Comportamento per metodi non stabbati: al contrario, le modalità generate con `@Generatenicemocks` restituiranno un valore legale predefinito per il tipo di restituzione del metodo quando viene chiamato un metodo non stampato. Questo valore predefinito non è destinato all'uso nella logica del test ma serve a prevenire errori di runtime dovuti a valori null o mancanti.
- Utilizzo: questa annotazione è consigliata per la maggior parte dei casi d'uso perché semplifica la scrittura di test riducendo la necessità di stubbi ogni possibile chiamata di metodo. Rende i test più robusti evitando i guasti a causa di mozziconi dimenticati.
- Ulteriori caratteristiche: `@Generatenicemocks" consente solo a "Mockspec" nella sua lista di argomenti, fornendo maggiore flessibilità nella personalizzazione delle classi simulate generate. Ad esempio, è possibile specificare un nome personalizzato per la classe simulata utilizzando il parametro `As` in` mockspec`.
differenze chiave
1. Gestione di metodi non stubusati: la differenza più significativa è il modo in cui ogni annotazione gestisce il metodo chiama senza espliciti mozziconi. `@Generatemocks` lancia un'eccezione, mentre`@generatenicemocks "restituisce un valore predefinito.
2. Codice semplicità e robustezza: `@GenerateniceMocks" generalmente porta a un codice di test più semplice e robusto riducendo la necessità di uno stoping esaustivo.
3. Personalizzazione: `@Generatenicemocks` offre più opzioni di personalizzazione tramite` mockspec`, consentendo nomi di classe simulazione personalizzati e altre configurazioni avanzate.
In sintesi, `@GenerateniceMocks` è generalmente preferito per la sua capacità di semplificare il codice di test e ridurre gli errori a causa di metodi non statuti, mentre`@Generatemocks` fornisce un approccio più rigoroso che può essere utile in scenari specifici in cui è richiesto un controllo esplicito sul comportamento simulato [1] [4] [11].
Citazioni:[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-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-which-appears-to-already-be-mocked
[11] https://pub.dev/packages/mockito