Maison > Java > javaDidacticiel > Quelle est la différence entre « @Mock » et « @InjectMocks » dans Mockito ?

Quelle est la différence entre « @Mock » et « @InjectMocks » dans Mockito ?

Susan Sarandon
Libérer: 2024-11-27 21:55:17
original
974 Les gens l'ont consulté

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

Délimitation de @Mock et @InjectMocks dans le framework Mockito

Le framework Mockito fournit des annotations qui aident à se moquer des objets pendant les tests. Deux annotations couramment utilisées sont @Mock et @InjectMocks, qui jouent des rôles distincts dans le processus de moquerie.

@Mock : une annotation de création simulée

En termes simples, @Mock sert à créer un objet fictif. Il génère un objet factice qui implémente une interface spécifique ou étend une classe spécifique. Les objets simulés sont utilisés pour remplacer les dépendances réelles lors des tests, permettant l'isolement de composants individuels et la simulation de scénarios spécifiques.

@InjectMocks : injecter des simulacres dans une instance de classe

Contrairement à @Mock, @InjectMocks est une annotation plus avancée qui combine moquerie et injection de dépendances. Il crée une instance de la classe testée et, surtout, injecte les objets fictifs créés avec les annotations @Mock (ou @Spy) dans cette instance.

Pour que @InjectMocks fonctionne correctement, il est essentiel d'utiliser @ RunWith(MockitoJUnitRunner.class) ou Mockito.initMocks(this) pour initialiser et injecter les dépendances fictives dans l'instance de classe. Avec JUnit 5, l'annotation @ExtendWith(MockitoExtension.class) est requise.

Voici un exemple qui exploite les deux annotations :

// JUnit 4
@RunWith(MockitoJUnitRunner.class)
public class SomeManagerTest {
   // ...

    @InjectMocks
    private SomeManager someManager;

    @Mock
    private SomeDependency someDependency; // This mock will be injected into someManager
   
    // ... // Tests ...

}
Copier après la connexion

En utilisant @InjectMocks, l'instance SomeManager sera créée avec l'objet fictif pour SomeDependency injecté, permettant aux cas de test de se concentrer sur le test du comportement de SomeManager tout en interagissant avec sa dépendance fictive. Cela facilite l'isolement et le test de scénarios spécifiques sans s'appuyer sur de réelles dépendances.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal