Maison  >  Article  >  Java  >  Quelle est la différence entre les annotations @Mock et @InjectMocks de Mockito ?

Quelle est la différence entre les annotations @Mock et @InjectMocks de Mockito ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-25 02:20:18488parcourir

What's the Difference Between Mockito's @Mock and @InjectMocks Annotations?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn