Die Unterschiede zwischen @Mock, @MockBean und Mockito.mock() verstehen
Unit-Tests beinhalten oft das Verspotten von Abhängigkeiten, aber es gibt sie verschiedene Ansätze, dies in Java zu tun. Um zwischen diesen Optionen zu unterscheiden, untersuchen wir die unterschiedlichen Zwecke und Funktionen von @Mock, @MockBean und Mockito.mock().
@Mock und Mockito.mock()
Sowohl @Mock als auch Mockito.mock() stammen aus der Mockito-Bibliothek, die eine annotationsbasierte Syntax und einen direkten Methodenaufruf zum Erstellen von Mockitos bietet.
Die Verwendung von @Mock mit der Annotation @RunWith aktiviert Mockito Anmerkungen während der Testausführung. Diese Annotation markiert die Variable, an die sie angehängt ist, als Mockito-Mock.
import org.mockito.Mock; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class MyClassTest { @Mock private MyService myservice; }
Im Gegensatz dazu erstellt Mockito.mock() direkt einen Mockito:
import org.mockito.Mockito; ... MyService myservice = Mockito.mock(MyService.class);
@MockBean von Spring Boot
@MockBean hingegen wird von der Spring Boot-Testbibliothek bereitgestellt, insbesondere unter der Klasse org.springframework.boot.test.mock.mockito.MockBean. Diese Annotation wurde speziell für die Verwendung mit Spring Boot-Kontexten entwickelt.
@MockBean ermöglicht das Hinzufügen von Mockbeans zu einem Spring ApplicationContext, wodurch Mocks effektiv überschrieben oder anstelle tatsächlicher Bean-Instanzen hinzugefügt werden.
Die richtige Option wählen: Classic Mockito vs. @MockBean
Wann welcher Ansatz zu verwenden ist, hängt vom Testszenario und der Verwaltung von Abhängigkeiten ab:
Typische Verwendung von @MockBean mit Spring WebMVC
In einem mit @WebMvcTest annotierten Webtestszenario wird @MockBean beispielsweise häufig zum Verspotten von Beans verwendet, die vom zu testenden Controller verwendet werden:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.web.servlet.MockMvc; ... @WebMvcTest(FooController.class) public class FooControllerTest { @Autowired private MockMvc mvc; @MockBean private FooService fooServiceMock; }
Indem Sie diese Unterschiede verstehen und den geeigneten Ansatz basierend auf Ihren Testanforderungen auswählen, können Sie Abhängigkeiten effektiv verwalten und effiziente und genaue Tests in Java mit Mockito und Spring Boot sicherstellen.
Das obige ist der detaillierte Inhalt vonWelcher Mocking-Ansatz ist der richtige für Sie: @Mock, @MockBean oder Mockito.mock()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!