Heim  >  Artikel  >  Java  >  Was ist der Unterschied zwischen Mockitos @Mock- und @InjectMocks-Annotationen?

Was ist der Unterschied zwischen Mockitos @Mock- und @InjectMocks-Annotationen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-25 02:20:18487Durchsuche

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

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!

Stellungnahme:
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