Если тебе нужно тестировать Spring MVC контроллеры, но не хочется поднимать всё приложение — используй
@WebMvcTest.Что это даёт
- Загружает только MVC-слой, без всего Application Context
- Тесты работают значительно быстрее
- Можно замокать сервисы через
@MockBean - Идеально для проверки контроллеров, статусов и ответов API
Когда использовать
- Тестируешь REST-контроллеры
- Нужно проверить HTTP-ответы
- Не нужна база, security, messaging и другие слои
Идея простая:
Вместо запуска всего приложения → поднимаем только веб-контекст.
Меньше зависимостей → быстрее тесты → стабильный CI.
Пример
@WebMvcTest(HelloController.class)
class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private HelloService helloService;
@Test
void sayHello_returnsExpectedMessage() throws Exception {
given(helloService.getMessage()).willReturn("Hello!");
mockMvc.perform(get("/api/hello"))
.andExpect(status().isOk())
.andExpect(content().string("Hello!"));
}
}
Если тестируешь только контроллер — не поднимай всё приложение.
WebMvcTest экономит секунды на каждом тесте и минуты в CI.
