@WebMvcTest загружает только веб-слой (контроллеры, фильтры, советы); @DataJpaTest загружает только уровень JPA с тестовой базой данных; @SpringBootTest загружает полный контекст приложения. Выберите самый узкий фрагмент, который проверяет то, что на самом деле тестируется — @SpringBootTest зарезервирован для настоящих сквозных сценариев, поскольку он оплачивает полную стоимость запуска контекста.
Пример
@WebMvcTest(OrderController.class)classOrderControllerTest {
@Autowired MockMvc mockMvc;
@MockBean OrderService orderService; // real service NOT loaded - only the web layer is@Testvoidreturns404WhenOrderMissing()throws Exception {
given(orderService.findById(1L)).willThrow(newOrderNotFoundException(1L));
mockMvc.perform(get("/api/orders/1"))
.andExpect(status().isNotFound())
.andExpect(jsonPath("$.code").value("ORDER_NOT_FOUND"));
}
}
Итог
@WebMvcTest загружает только веб-слой (контроллеры, фильтры, советы); @DataJpaTest загружает только уровень JPA с тестовой базой данных; @SpringBootTest загружает полный контекст приложения.
В чем разница между @WebMvcTest, @DataJpaTest и @SpringBootTest и к… · Sobeso