Mockito n'est pas un framework DI et même les frameworks DI encouragent les injections de constructeur par rapport aux injections de champ.
Vous déclarez donc simplement un constructeur pour définir les dépendances de la classe testée:
@Mock
private SomeService serviceMock;
private Demo demo;
@BeforeEach
public void beforeEach(){
demo = new Demo(serviceMock);
}
Utiliser Mockito spy
pour le cas général est un terrible conseil. Cela rend la classe de test fragile, pas droite et sujette aux erreurs: qu'est-ce qui est vraiment moqué? Qu'est-ce qui est vraiment testé?
@InjectMocks
et @Spy
nuit également à la conception globale car elle encourage les classes gonflées et les responsabilités mixtes dans les classes.
Veuillez lire le spy()
javadoc avant de l'utiliser à l'aveugle (l'accent n'est pas le mien):
Crée un espion de l'objet réel. L'espion appelle de vraies méthodes à moins qu'elles ne soient écrasées. Les vrais espions doivent être utilisés avec précaution et occasionnellement , par exemple lorsqu'il s'agit de code hérité.
Comme d'habitude, vous allez lire partial mock warning
: La programmation orientée objet aborde la complexité en divisant la complexité en objets SRPy séparés et spécifiques. Comment la simulation partielle s'inscrit-elle dans ce paradigme? Eh bien, ce n'est tout simplement pas le cas ... Une simulation partielle signifie généralement que la complexité a été déplacée vers une méthode différente sur le même objet. Dans la plupart des cas, ce n'est pas ainsi que vous souhaitez concevoir votre application.
Cependant, il y a de rares cas où les simulations partielles sont utiles: traiter du code que vous ne pouvez pas changer facilement (interfaces tierces, refactoring intermédiaire du code hérité, etc.) Cependant, je n'utiliserais pas de simulations partielles pour les nouveaux, pilotés par les tests et bien - code conçu.