Heim > Java > javaLernprogramm > Hauptteil

Welcher Mocking-Ansatz ist der richtige für Sie: @Mock, @MockBean oder Mockito.mock()?

Susan Sarandon
Freigeben: 2024-10-26 06:52:30
Original
632 Leute haben es durchsucht

 Which Mocking Approach is Right for You: @Mock, @MockBean, or Mockito.mock()?

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;
}
Nach dem Login kopieren

Im Gegensatz dazu erstellt Mockito.mock() direkt einen Mockito:

import org.mockito.Mockito;
...
MyService myservice = Mockito.mock(MyService.class);
Nach dem Login kopieren

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

  • Classic Mockito: Ideal für Unit-Tests, bei denen Sie sich nicht auf den Spring Boot-Container verlassen und die getestete Komponente isolieren möchten. Dieser Ansatz ist äußerst effizient und fördert die Isolation.
  • @MockBean: Bevorzugt für Tests, die eine Interaktion mit dem Spring Boot-Container erfordern, insbesondere beim Verspotten von Beans, die vom Container verwaltet werden.

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;
}
Nach dem Login kopieren

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!

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