Den Unterschied zwischen @Mock und @InjectMocks in Mockito verstehen
Mockito, ein beliebtes Mocking-Framework für Java, bietet zwei wichtige Anmerkungen: @ Mock und @InjectMocks. Während beide für Mock-Tests unerlässlich sind, dienen sie unterschiedlichen Zwecken.
@Mock: Mocks erstellen
@Mock wird zum Erstellen eines Mock-Objekts verwendet. Es stellt eine gefälschte oder simulierte Implementierung eines realen Objekts dar. Mit Mocks können Sie ihr Verhalten steuern und ihre Interaktionen in Ihren Tests bestätigen. Zum Beispiel:
@Mock private SomeDependency someDependency;
Dieser Code erstellt eine Nachbildung der SomeDependency-Schnittstelle. Sie können diesen Mock dann in Ihren Tests verwenden.
@InjectMocks: Mocks injizieren
Im Gegensatz dazu spielt @InjectMocks eine andere Rolle. Es wird verwendet, um eine Instanz einer Klasse zu erstellen und die mit @Mock- (oder @Spy-)Annotationen erstellten Mocks in diese Instanz einzufügen. Dadurch können Sie Interaktionen zwischen mehreren Klassen und deren Abhängigkeiten testen, ohne echte Instanzen zu erstellen. Zum Beispiel:
@InjectMocks private SomeManager someManager;
In diesem Fall ist someManager eine Instanz der SomeManager-Klasse. Die @InjectMocks-Annotation weist Mockito an, den someDependency-Mock in die someManager-Instanz zu injizieren.
Initialisierungs- und Nutzungshinweise
Um @InjectMocks zu verwenden, müssen Sie die Mocks mit @ initialisieren. RunWith(MockitoJUnitRunner.class) oder Mockito.initMocks(this) für JUnit 4 und @ExtendWith(MockitoExtension.class) für JUnit 5. Denken Sie außerdem daran, dass @InjectMocks nur einmal in einer Testklasse verwendet werden darf und in dem Feld platziert werden sollte, das die zu testende Klasse darstellt.
Beispielverwendung
Das folgende Beispiel veranschaulicht die Verwendung von @Mock und @InjectMocks:
@RunWith(MockitoJUnitRunner.class) public class SomeManagerTest { @InjectMocks private SomeManager someManager; @Mock private SomeDependency someDependency; // this will be injected into someManager // tests... }
In diesem Test wird der someDependency-Mock automatisch in die someManager-Instanz eingefügt, sodass Sie deren Interaktionen effektiv testen können.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Mockitos @Mock- und @InjectMocks-Annotationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!