REST Assured

Тема дорожной карты · Spring Boot

REST Assured в Spring Boot — мощная комбинация для написания лаконичных, читаемых интеграционных тестов против Spring Boot REST API без многословности прямых утверждений MockMvc или WebClient. REST Assured предоставляет fluent DSL — given().header("Authorization", token).when().get("/api/users/1").then().statusCode(200).body("email", equalTo("test@example.com")) — который читается почти как обычный текст и интегрируется с JUnit 5, TestNG и аннотацией Spring Boot @SpringBootTest(webEnvironment = RANDOM_PORT) для тестирования полностью запущенного экземпляра Tomcat или Netty. Модуль RestAssuredMockMvc подключает REST Assured напрямую к стеку MockMvc, позволяя тестам работать без реального HTTP-сервера и пользоваться поддержкой тестирования Spring Security и загрузкой среза @WebMvcTest. REST Assured в Spring Boot поддерживает валидацию JSON Schema через модуль json-schema-validator, инъекцию Bearer-токена OAuth2, загрузку составных файлов и утверждения времени ответа, покрывая типичные требования к контракту API в одной тестовой зависимости. Команды, использующие Testcontainers вместе с REST Assured, могут поднимать реальные Docker-экземпляры PostgreSQL или MongoDB и проверять полные потоки данных Spring Boot от базы до HTTP, обеспечивая высокую уверенность перед развёртыванием на Kubernetes-стейджинге.

Как это работает

REST Assured: @SpringBootTest бутит полный контекст для интеграционных тестов (медленно, но реалистично). @WebMvcTest + MockMvc для controller-layer unit-тестов (без DB, без полного контекста — быстро). @DataJpaTest для repository-тестов на H2/Testcontainers DB. Testcontainers (Java интеграция) поднимают реальные DB/queues/сервисы в Docker per test — самый high-fidelity вариант. REST Assured для fluent end-to-end API-тестов. Spring Boot test slices держат тесты быстрыми, бутая только нужный слой.

Когда применять

Дефолт Testcontainers вместо H2 — та же DB в тестах + prod = без сюрпризов dialect. Slice-тесты (@WebMvcTest, @DataJpaTest) для быстрой обратной связи; @SpringBootTest для настоящих интеграционных тестов. Mock external HTTP-сервисы через WireMock. Целитесь в testing pyramid — много unit, меньше slice, ещё меньше full integration.

Типичные ошибки

Ловушки REST Assured: только @SpringBootTest везде (медленно + flaky); H2 для теста против Postgres prod (H2 + Postgres SQL отличаются); flaky-тесты из-за random ports без proper cleanup; мокают всё (тестируете моки, не код).

Связанные понятия

Полезные ресурсы