Ответ
Для комплексного тестирования микросервиса на Java используется многоуровневый подход с соответствующими инструментами.
Уровни тестирования и инструменты:
| Уровень | Инструменты | Цель |
|---|---|---|
| Модульные (Unit) | JUnit 5, Mockito, AssertJ | Проверка логики отдельных классов/методов в изоляции. |
| Интеграционные | Spring Boot Test, Testcontainers, @DataJpaTest | Проверка взаимодействия с БД, внешними API, брокерами сообщений. |
| API (E2E) | RestAssured, Testcontainers | Проверка HTTP-эндпоинтов и полного потока через запущенное приложение. |
| Контрактные | Pact, Spring Cloud Contract | Гарантия совместимости интерфейсов между потребителем и поставщиком (сервисами). |
Пример модульного теста с JUnit 5 и Mockito:
@Test
void shouldReturnUserWhenFound() {
// Arrange
UserRepository mockRepo = Mockito.mock(UserRepository.class);
UserService service = new UserService(mockRepo);
User expectedUser = new User(1L, "John");
when(mockRepo.findById(1L)).thenReturn(Optional.of(expectedUser));
// Act
User actualUser = service.getUserById(1L);
// Assert
assertThat(actualUser).isEqualTo(expectedUser);
}
Ключевые практики:
- Использовать Testcontainers для поднятия реальных зависимостей (PostgreSQL, Kafka, Redis) в Docker-контейнерах для интеграционных тестов.
- Покрывать не только "счастливый путь", но и граничные случаи, ошибки валидации, исключительные сценарии.
- Интегрировать запуск тестов в CI/CD пайплайн (например, через Maven Surefire/Failsafe плагины в GitHub Actions/Jenkins).