Comprendre la distinction entre @Mock et @InjectMocks dans Mockito
Mockito, un framework moqueur populaire pour Java, fournit deux annotations importantes : @ Mock et @InjectMocks. Bien que les deux soient essentiels pour les tests moqueurs, ils servent des objectifs distincts.
@Mock : Création de simulations
@Mock est utilisé pour créer un objet simulé. Il représente une implémentation fausse ou simulée d’un objet réel. Les mocks vous permettent de contrôler leur comportement et d'affirmer leurs interactions au sein de vos tests. Par exemple :
@Mock private SomeDependency someDependency;
Ce code crée une simulation de l'interface SomeDependency. Vous pouvez ensuite utiliser cette simulation dans vos tests.
@InjectMocks : Injecter des simulations
En revanche, @InjectMocks joue un rôle différent. Il est utilisé pour créer une instance d'une classe et injecter les simulations créées avec les annotations @Mock (ou @Spy) dans cette instance. Cela vous permet de tester les interactions entre plusieurs classes et leurs dépendances sans créer d'instances réelles. Par exemple :
@InjectMocks private SomeManager someManager;
Dans ce cas, someManager est une instance de la classe SomeManager. L'annotation @InjectMocks indique à Mockito d'injecter le mock someDependency dans l'instance someManager.
Notes d'initialisation et d'utilisation
Pour utiliser @InjectMocks, vous devez initialiser les mocks en utilisant @ RunWith (MockitoJUnitRunner.class) ou Mockito.initMocks (this) pour JUnit 4 et @ExtendWith(MockitoExtension.class) pour JUnit 5. De plus, rappelez-vous que @InjectMocks ne doit être utilisé qu'une seule fois dans une classe de test et doit être placé sur le champ représentant la classe testée.
Exemple d'utilisation
L'exemple suivant illustre comment utiliser @Mock et @InjectMocks :
@RunWith(MockitoJUnitRunner.class) public class SomeManagerTest { @InjectMocks private SomeManager someManager; @Mock private SomeDependency someDependency; // this will be injected into someManager // tests... }
Dans ce test, le mock someDependency sera automatiquement injecté dans l'instance someManager, vous permettant de tester efficacement leurs interactions.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!