Maison  >  Article  >  Java  >  @Mock vs @InjectMocks dans Mockito : quelle est la différence ?

@Mock vs @InjectMocks dans Mockito : quelle est la différence ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-24 05:09:11344parcourir

@Mock vs. @InjectMocks in Mockito: What's the Difference?

Comprendre la distinction entre @Mock et @InjectMocks dans Mockito

Mockito, un framework moqueur renommé en Java, fournit deux annotations, @Mock et @InjectMocks, pour faciliter les tests unitaires. Bien qu'ils jouent tous deux un rôle crucial dans le processus de test, ils ont des fonctionnalités distinctes.

@Mock : l'outil de création de simulation

L'annotation @Mock est utilisée pour créer des simulations. objets. Un objet fictif est un substitut léger à un objet réel qui simule son comportement de manière contrôlée. Lorsque vous annotez une classe ou une interface avec @Mock, Mockito génère une implémentation fictive qui peut être manipulée et vérifiée lors des tests unitaires.

@InjectMocks : le facilitateur d'injection de dépendances

Contrairement à @Mock, @InjectMocks a un objectif différent. Il est appliqué à la classe testée pour injecter des simulacres ou des espions (instances de la classe réelle qui peuvent être partiellement simulées) qui ont été créés à l'aide de l'annotation @Mock. Ce processus d'injection s'effectue automatiquement lors de l'initialisation du test, ce qui facilite la configuration des configurations de test.

Comment ils fonctionnent ensemble

Pour démontrer l'interaction entre @Mock et @ InjectMocks, considérez l'extrait de code suivant :

@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // injected into someManager

    // tests...

}

Dans cet exemple, l'annotation @InjectMocks est appliquée au Classe SomeManagerTest, spécifiant qu’il s’agit de la classe testée. L'annotation @Mock est utilisée pour créer une simulation pour la classe SomeDependency. Lorsque le test est exécuté, la dépendance fictive est injectée dans l'instance someManager.

En combinant @Mock et @InjectMocks, nous pouvons rationaliser le processus de configuration fictive et simplifier les tests d'interactions de classes complexes. Il est important de noter que le MockitoJUnitRunner.class (ou MockitoExtension.class pour JUnit 5) doit être inclus dans la classe de test ou initialisé manuellement pour initialiser les mocks et les injecter.

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