Heim > Java > javaLernprogramm > Was ist der Unterschied zwischen „@Mock' und „@InjectMocks' in Mockito?

Was ist der Unterschied zwischen „@Mock' und „@InjectMocks' in Mockito?

Susan Sarandon
Freigeben: 2024-11-27 21:55:17
Original
954 Leute haben es durchsucht

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

Abgrenzen von @Mock und @InjectMocks im Mockito-Framework

Das Mockito-Framework bietet Anmerkungen, die beim Verspotten von Objekten beim Testen helfen. Zwei häufig verwendete Annotationen sind @Mock und @InjectMocks, die unterschiedliche Rollen im Mocking-Prozess spielen.

@Mock: Eine Annotation zur Mock-Erstellung

Einfach ausgedrückt: @Mock dient dazu, ein Scheinobjekt zu erstellen. Es generiert ein Dummy-Objekt, das eine bestimmte Schnittstelle implementiert oder eine bestimmte Klasse erweitert. Mock-Objekte werden verwendet, um echte Abhängigkeiten während des Testens zu ersetzen und so die Isolierung einzelner Komponenten und die Simulation spezifischer Szenarien zu ermöglichen.

@InjectMocks: Injizieren von Mocks in eine Klasseninstanz

Im Gegensatz zu @Mock ist @InjectMocks eine fortgeschrittenere Annotation, die Mocking und Abhängigkeitsinjektion kombiniert. Es erstellt eine Instanz der zu testenden Klasse und fügt, was wichtig ist, die mit @Mock- (oder @Spy-)Annotationen erstellten Scheinobjekte in diese Instanz ein.

Damit @InjectMocks ordnungsgemäß funktioniert, ist es wichtig, @ zu verwenden. RunWith(MockitoJUnitRunner.class) oder Mockito.initMocks(this), um die Scheinabhängigkeiten zu initialisieren und in die Klasseninstanz einzufügen. Mit JUnit 5 ist die Annotation @ExtendWith(MockitoExtension.class) erforderlich.

Hier ist ein Beispiel, das beide Annotationen nutzt:

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

    @InjectMocks
    private SomeManager someManager;

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

}
Nach dem Login kopieren

Durch die Verwendung von @InjectMocks wird die SomeManager-Instanz erstellt mit dem Mock-Objekt für SomeDependency injiziert, sodass sich die Testfälle auf das Testen des Verhaltens von SomeManager während der Interaktion mit seinem Mock konzentrieren können Abhängigkeit. Dies erleichtert die Isolierung und das Testen spezifischer Szenarien, ohne sich auf echte Abhängigkeiten zu verlassen.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen „@Mock' und „@InjectMocks' in Mockito?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage