Spring Boot: тестирование на работающем сервере
Если вам нужно запустить полнофункциональный сервер, рекомендуется использовать случайные порты. Если вы используете @SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT), доступный порт выбирается случайным образом при каждом запуске теста.
Аннотация @LocalServerPort может использоваться для ввода фактического порта, используемого в вашем тесте. Для удобства тесты, которые должны выполнять REST вызовы на запущенном сервере, могут дополнительно привязать с помощью @Autowire WebTestClient, который разрешает относительные ссылки на работающий сервер и поставляется с выделенным API для проверки ответов, как показано в следующем примере:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.web.reactive.server.WebTestClient;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class RandomPortWebTestClientExampleTests {
@Test
void exampleTest(@Autowired WebTestClient webClient) {
webClient.get().uri("/").exchange().expectStatus().isOk().expectBody(String.class).isEqualTo("Hello World");
}
}
Эта настройка требует spring-webflux на пути к классам. Если вы не можете или не хотите добавлять webflux, Spring Boot также предоставляет возможность использовать TestRestTemplate:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class RandomPortTestRestTemplateExampleTests {
@Test
void exampleTest(@Autowired TestRestTemplate restTemplate) {
String body = restTemplate.getForObject("/", String.class);
assertThat(body).isEqualTo("Hello World");
}
}
Настройка WebTestClient
Чтобы настроить bean-компонент WebTestClient, настройте bean-компонент WebTestClientBuilderCustomizer. Любые такие бины вызываются с помощью WebTestClient.Builder, который используется для создания WebTestClient.
Использование JMX
Поскольку инфраструктура тестового контекста кэширует контекст, JMX по умолчанию отключен, чтобы идентичные компоненты не могли регистрироваться в одном домене. Если для такого теста требуется доступ к MBeanServer, попробуйте пометить его как dirty:
@ExtendWith(SpringExtension.class)
@SpringBootTest(properties = "spring.jmx.enabled=true")
@DirtiesContext
class SampleJmxTests {
@Autowired
private MBeanServer mBeanServer;
@Test
void exampleTest() {
// ...
}
}
Читайте также:
- Spring Boot: тестирование в фиктивной (mock) среде
- Spring Boot: тестирование, определение типа веб-приложения, определение конфигурации теста
- Spring Boot: тестирование, исключение тестовой конфигурации, использование аргументов приложения
Комментарии
Отправить комментарий