2 ответов:
обычная библиотека Mockito
import org.mockito.Mock; ... @Mock MyService myservice;и
import org.mockito.Mockito; ... MyService myservice = Mockito.mock(MyService.class);приходят из библиотеки Mockito и функционально эквивалентны.
Они позволяют издеваться над классом или интерфейсом и записывать и проверять поведение на нем.способ использования аннотации короче, поэтому предпочтительнее и часто предпочтительнее.
обратите внимание, что для включения аннотаций Mockito во время выполнения тестов
MockitoAnnotations.initMocks(this)статический метод должен быть вызван.
Чтобы избежать побочных эффектов между тестами, рекомендуется делать это перед каждым выполнением теста:@Before public void initMocks() { MockitoAnnotations.initMocks(this); }еще один способ включить аннотации Mockito-это аннотирование тестового класса с помощью
@RunWithуказатьMockitoJUnitRunnerчто делает эту задачу, а также другие полезные вещи:@RunWith(org.mockito.runners.MockitoJUnitRunner.class) public MyClassTest{...}
Весна загрузки библиотеки накрутка Mockito библиотека
это действительно a Весна Загрузки класс:
import org.springframework.boot.test.mock.mockito.MockBean; ... @MockBean MyService myservice;класс включен в
spring-boot-testбиблиотека.это позволяет добавить Mockito издевается весной
ApplicationContext.
Если Боб, совместимый с объявленным классом, существует в контексте, то он заменяет это макет.
Если это не так, то это добавляет макет в контексте объекта.ссылка Javadoc:
аннотации, которые можно использовать для добавления издевается над пружиной ApplicationContext.
...
если какой-либо существующий отдельный компонент того же типа определен в контексте будет заменен макет, если ни один существующий Боб не определен новый будут добавлены.
при использовании classic / plain Mockito и при использовании
@MockBeanот весеннего ботинка ?модульные тесты предназначены для тестирования компонента в изоляции от других компонентов и блока тесты также имеют требование: быть как можно быстрее с точки зрения времени выполнения, поскольку эти тесты могут выполняться каждый день десятки раз на машинах разработчика.
следовательно, вот простое руководство :
когда вы пишете тест, который не нуждается в каких-либо зависимостях от контейнера Spring Boot, классический/простой Mockito-это способ следовать : он быстрый и способствует изоляции тестируемого компонента.
Если ваш тест должен полагаться на пружинный загрузочный контейнер и вы также хотите добавить или издеваться над одним из контейнерных бобов:@MockBeanот Spring Boot-это путь.
типичное использование Spring Boot
@MockBeanкак мы пишем тестовый класс с аннотацией
@WebMvcTest(срез веб-тестов).документация по весенней загрузке резюмирует это очень хорошо:
часто
@WebMvcTestбудет ограничено одним контроллер и используется в комбинация с@MockBeanчтобы обеспечить макетные реализации для требуются сотрудники.вот пример :
import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; 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.http.MediaType; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringRunner.class) @WebMvcTest(FooController.class) public class FooControllerTest { @Autowired private MockMvc mvc; @MockBean private FooService fooServiceMock; @Test public void testExample() throws Exception { Foo mockedFoo = new Foo("one", "two"); Mockito.when(fooServiceMock.get(1)) .thenReturn(mockedFoo); mvc.perform(get("foos/1") .accept(MediaType.TEXT_PLAIN)) .andExpect(status().isOk()) .andExpect(content().string("one two")); } }
в конце его легко объяснить. Если вы просто посмотрите в javadocs аннотаций вы увидите различия:
@ Mock: (
org.mockito.Mock)Mark a field as a mock. - Allows shorthand mock creation. - Minimizes repetitive mock creation code. - Makes the test class more readable. - Makes the verification error easier to read because the field name is used to identify the mock.@MockBean: (
org.springframework.boot.test.mock.mockito.MockBean)Annotation that can be used to add mocks to a Spring ApplicationContext. Can be used as a class level annotation or on fields in either @Configuration classes, or test classes that are @RunWith the SpringRunner. Mocks can be registered by type or by bean name. Any existing single bean of the same type defined in the context will be replaced by the mock, if no existing bean is defined a new one will be added. When @MockBean is used on a field, as well as being registered in the application context, the mock will also be injected into the field.Mockito.mock ()
Its just the representation of a @Mock.
Comments