Если, с другой стороны, вы хотите установить быстрый модульный тест выполнения без необходимости полного запуска SpringBoot ... читайте дальше.
Использование @SpringBootTest настраивает среду полного интеграционного тестирования, которая запускает полный экземпляр SpringBoot, поэтому при активной разработке это занимает относительно много времени. Spring MockMVC приходит на помощь, поскольку он эмулирует servletContainer до такой степени, что вы можете включить любые тесты фильтрации запросов или обработки исключений в ваш набор модульных тестов.
Вы можете настроить эту настройку следующим образом:
Настройка настраиваемого контекста теста : @ContextConfiguration позволяет указать классы, необходимые для теста. Установите Mockito MockMvc, который, более того, эмулирует контейнер сервлета, и настройте свои тестовые данные и зависимости.
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {
WebConfig.class,
SomeFilter.class,
HeaderFactory.class,
})
@Slf4j
public class OrganisationCtrlTest {
private MockMvc mvc;
private Organisation coorg;
@Autowired
private SomeFilter someFilter;
@MockBean
private OrganisationSvc service;
@InjectMocks
private OrganisationCtrl controller = new OrganisationCtrl();
//Constructor
public OrganisationCtrlTest() {
}
....
Настройка фиктивного эмулятора сервлета MVC : зарегистрировать компоненты-обработчики в контексте и создать эмулятор mockMvc (Примечание. Возможны две конфигурации: standaloneSetup или webAppContextSetup; см. Документацию ). Конструктор по праву реализует шаблон Построителя, поэтому перед вызовом build () вы можете объединить команды конфигурации для обработчиков исключений и обработчиков.
@Before
public void setUp() {
final StaticApplicationContext appContext = new StaticApplicationContext();
appContext.registerBeanDefinition("BusinessExceptionHandler",
new RootBeanDefinition(BusinessExceptionHandler.class, null, null));
appContext.registerBeanDefinition("InternalExceptionHandler",
new RootBeanDefinition(InternalExceptionHandler.class, null,
null));
MockitoAnnotations.initMocks(this);
mvc = MockMvcBuilders.standaloneSetup(controller)
.setHandlerExceptionResolvers(getExceptionResolver(appContext))
.addFilters(someFilter)
.build();
coorg = OrganisationFixture.getFixture("orgID", "name", "webSiteUrl");
}
....
Проведите свои тесты
@Test
public void testGetSingleOrganisationRecordAndSuccess() throws Exception {
System.out.println("testGetSingleOrganisationRecordAndSuccess");
String request = "/orgs/{id}";
log.info("Request URL: " + request);
when(service.getOrganisation(anyString())).
thenReturn(coorg);
this.mvc.perform(get(request)
.accept(VndMediaType.UNITERRA_RFV1_JSON_UTF8)
.header("Accept-Language", "en"))
.andExpect(content().contentType(
.APPLICATION_JSON_UTF8))
.andExpect(status().isOk())
.andExpect(content().string(containsString("org")))
.andExpect(content().string(containsString("aName")))
.andExpect(content().string(containsString("aUrl")))
.andDo(print());
}
....
}
Надеюсь, это поможет.
Джейк.