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 ... }
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!