Les annotations «GenerateMocks» et «@ GeneraTeneMocks» dans Mockito sont utilisées pour générer des classes simulées pour les tests unitaires dans les applications DART et Flutter. Bien que les deux annotations servent le même objectif principal, ils diffèrent considérablement dans leur comportement lors de la gestion des appels de méthode non stubés.
@GenerateMocks
- Comportement pour les méthodes non nulles: Lorsqu'une méthode est appelée sur un objet simulé généré avec `@ GenerateMocks` et qu'aucun stub n'a été défini pour cette méthode, Mockito lancera une exception. Ce comportement garantit que vous définissez explicitement les talons pour toutes les méthodes qui devraient être appelées lors d'un test, aidant à attraper des surveillants potentiels dans la configuration du test.
- Utilisation: cette annotation est généralement utilisée lorsque vous souhaitez un contrôle strict sur le comportement de vos simulations, garantissant que les appels de méthode inattendus sont immédiatement signalés comme des erreurs.
- Statut de dépréciation: `@ GenerateMocks` est considéré comme moins recommandé par rapport à` @ GeneraTeneCEMOCKS »en raison de son comportement strict, ce qui peut conduire à un code de test plus verbeux s'il n'est pas géré avec soin.
@GeneraTeniceMocks
- Comportement pour les méthodes non tubbés: En revanche, les maquettes générées avec `@ GeneraTeneCEMOCKS» renverront une valeur légale par défaut pour le type de retour de la méthode lorsqu'une méthode non stubbed est appelée. Cette valeur par défaut n'est pas destinée à être utilisée dans la logique de test mais sert à empêcher les erreurs d'exécution en raison de valeurs nulles ou manquantes.
- Utilisation: cette annotation est recommandée pour la plupart des cas d'utilisation car il simplifie l'écriture de test en réduisant la nécessité de coller tous les appels de méthode possible. Il rend les tests plus robustes en évitant les échecs en raison de talons oubliés.
- Fonctionnalités supplémentaires: `@ GeneraTeneCoMOCKS» ne permet que `MockSpec dans sa liste d'arguments, offrant plus de flexibilité pour personnaliser les classes de simulation générées. Par exemple, vous pouvez spécifier un nom personnalisé pour la classe Mock en utilisant le paramètre «AS» dans «MockSpec».
Différences clés
1. Gestion des méthodes non stubbed: La différence la plus significative est la façon dont chaque annotation gère la méthode appelle sans talons explicites. `@ GenerateMocks` lève une exception, tandis que` @ GeneraTeniCEMOCKS »renvoie une valeur par défaut.
2.
3. Personnalisation: `@ GeneraTeneMoMOCS - offre plus d'options de personnalisation via` MockSpec`, permettant des noms de classe de simulation personnalisés et d'autres configurations avancées.
En résumé, `@ GeneraTeneciMocks` est généralement préféré pour sa capacité à simplifier le code de test et à réduire les erreurs dues à des méthodes non nulles, tandis que` @ GenerateMOCKS »fournit une approche plus stricte qui peut être utile dans des scénarios spécifiques où un contrôle explicite sur le comportement de moque est requis [1] [4] [11].
Citations:[1] https://www.amaysim.technology/blog/flumber-test-mockito-generatemocks-vs-generatenicemocks
[2] https://www.reddit.com/r/golang/comments/UA0HPS/Generated_vs_handwritten_mocks/
[3] https://blog.logrocket.com/unit-test-flutter-code-mockito/
[4] https://pub.dev/documentation/mockito/latest/annotations/GeneraTeneMocks-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-hich-Appears-to-Aready-Be-Mocked
[11] https://pub.dev/packages/mockito