Ответ
@WebMvcTest — это аннотация Spring Boot для срезового (slice) тестирования веб-слоя приложения. Она фокусируется только на компонентах Spring MVC, не загружая полный контекст приложения.
Основные цели:
- Тестирование контроллеров (
@Controller,@RestController). - Проверка маппинга запросов, валидации, обработки исключений.
- Изоляция: Автоматически настраивает только релевантные для MVC бины (например,
@Controller,@ControllerAdvice,@JsonComponent,WebMvcConfigurer). - Отключение: Не загружает бины, помеченные
@Service,@Repository,@Component(их нужно мокировать).
Типичная структура теста:
@WebMvcTest(UserController.class) // Загружает только UserController и связанную MVC-инфраструктуру
class UserControllerTest {
@Autowired
private MockMvc mockMvc; // Главный инструмент для тестирования MVC без запуска сервера
@MockBean
private UserService userService; // Зависимость контроллера заменяется моком
@Test
void getUser_ShouldReturnUser() throws Exception {
User mockUser = new User(1L, "John");
given(userService.findById(1L)).willReturn(mockUser);
mockMvc.perform(get("/api/users/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("John"));
}
}
Что не входит в контекст @WebMvcTest: Полноценные сервисы, репозитории, безопасность (только ее MVC-часть), JPA. Для их тестирования используйте @SpringBootTest.