Какие фреймворки подходят для интеграционного тестирования в Java?

«Какие фреймворки подходят для интеграционного тестирования в Java?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Выбор зависит от типа приложения (Spring, микросервисы, работа с БД). Вот основные инструменты:

1. Spring Boot Test — стандарт для Spring-приложений.

  • @SpringBootTest — поднимает полный контекст приложения.
  • @WebMvcTest — для тестирования слоя контроллеров (без полного поднятия контекста).
  • @DataJpaTest — для тестирования JPA-репозиториев.

Пример теста REST-контроллера:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class UserControllerIT {
    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    void getUser_ReturnsUser() {
        ResponseEntity<User> response = 
            restTemplate.getForEntity("/api/users/1", User.class);
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
        assertThat(response.getBody().getName()).isEqualTo("John");
    }
}

2. Testcontainers — золотой стандарт для тестов с реальными внешними сервисами (БД, брокеры сообщений).

@Testcontainers
class UserRepositoryIT {
    @Container
    static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15");
    // Тесты используют реальную БД в Docker
}

3. REST Assured — DSL для тестирования REST API.

given()
    .contentType(ContentType.JSON)
.when()
    .get("/users/1")
.then()
    .statusCode(200)
    .body("name", equalTo("John"));

4. WireMock — для мокирования HTTP-сервисов. Вывод: Для монолита на Spring — Spring Boot Test + Testcontainers. Для микросервисов — REST Assured/Testcontainers/WireMock.