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() {
        // ...
    }

}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки