Какие инструменты и фреймворки используются для тестирования в Java?

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

Ответ

Стек инструментов для тестирования зависит от типа тестов:

1. Модульное тестирование (Unit Testing):

  • JUnit 5 (Jupiter): Стандартный фреймворк для написания тестов.
  • Mockito: Библиотека для создания mock- и stub-объектов, изоляции тестируемого модуля.
  • AssertJ: Предоставляет fluent API для утверждений, улучшая читаемость.

Пример модульного теста:

@Test
void getUser_ShouldReturnUser_WhenIdExists() {
    // Arrange
    UserRepository mockRepo = mock(UserRepository.class);
    User expectedUser = new User(1L, "John");
    when(mockRepo.findById(1L)).thenReturn(Optional.of(expectedUser));
    UserService service = new UserService(mockRepo);

    // Act
    User result = service.getUserById(1L);

    // Assert
    assertThat(result).isEqualTo(expectedUser); // AssertJ
    verify(mockRepo).findById(1L); // Проверка вызова mock
}

2. Интеграционное тестирование:

  • Spring Boot Test: Предоставляет аннотации (@SpringBootTest, @DataJpaTest) для поднятия контекста приложения.
  • Testcontainers: Запускает реальные базы данных (PostgreSQL, Redis) в Docker-контейнерах для тестов.

3. Другие типы:

  • Cucumber: Для BDD (Behavior-Driven Development) и написания тестов на Gherkin.
  • Gatling/JMeter: Для нагрузочного (load) и стресс-тестирования.