J'ai un projet de démarrage Spring qui comporte une suite de tests unitaires qui utilisent @InjectMocks de mockito pour instancier la classe testée et injecter tous les faux qui peuvent y être présents.@Autowire combiné avec @InjectMocks
En d'autres termes, si je cette
@InjectMocks MyClass MyClass;
Je ne ai pas besoin
MyClass myClass = new MyClass();
ou @Autorisé MyClass myClass;
Jusqu'à présent, cette configuration a bien fonctionné. Cependant, plus récemment, il est devenu nécessaire d'avoir accès aux propriétés de démarrage du projet lors de l'exécution des tests. Cela signifie qu'il a été nécessaire d'utiliser le runner de tâches SpringBoot dans les tests pour que toutes les instances de @Autowire (y compris celles qui instancient la classe Environment) fonctionnent.
J'ai découvert que si @InjectMocks est utilisé pour instancier une classe alors toutes les instances de @Autowired dans la classe ne fonctionnent pas (l'objet qu'ils doivent créer est null). Cela signifie aucune classe d'environnement et aucun accès aux propriétés Spring.
Au lieu de cela je dois ajouter @Autowired à l'annotation @InjectMocks
donc ce
@InjectMocks MaClasse myClass;
devient ce
@Autowired
@InjectMocks MyClass MyClass;
Ma question est simple. Y at-il quelque chose de mal à faire cela? Double-instancie myClass ou fait tout ce qui peut causer des problèmes