middle
Какие режимы webEnvironment существуют в SpringBootTest?
Параметр webEnvironment аннотации @SpringBootTest определяет, как будет запущено веб-окружение.
| Режим | Описание |
|---|---|
MOCK (по умолчанию) |
Создаёт mock-веб-окружение. Реальный сервер не запускается. Используется совместно с MockMvc. |
RANDOM_PORT |
Запускает реальный веб-сервер на случайном свободном порту. Идеален для интеграционных тестов с TestRestTemplate. |
DEFINED_PORT |
Запускает реальный веб-сервер на порту из конфигурации (server.port), по умолчанию 8080. |
NONE |
Загружает ApplicationContext без какого-либо веб-окружения. Подходит для тестирования сервисов и репозиториев. |
Примеры использования
// Мок-окружение (без реального сервера)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureMockMvc
class MockEnvTest {
@Autowired
private MockMvc mockMvc;
@Test
void testWithMockMvc() throws Exception {
mockMvc.perform(get("/api/users"))
.andExpect(status().isOk());
}
}
// Реальный сервер на случайном порту
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class RandomPortTest {
@Autowired
private TestRestTemplate restTemplate;
@LocalServerPort
private int port;
@Test
void testWithRealServer() {
ResponseEntity<String> response =
restTemplate.getForEntity("/api/users", String.class);
assertEquals(HttpStatus.OK, response.getStatusCode());
}
}
// Без веб-окружения
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
class NoWebTest {
@Autowired
private UserService userService;
@Test
void testServiceOnly() {
assertNotNull(userService.findAll());
}
}
На собеседовании: интервьюер хочет услышать, когда какой режим применять. Частая ошибка — не знать разницу между
MOCKиRANDOM_PORTи всегда использоватьRANDOM_PORT, замедляя тесты.