Ответ
Выбор фреймворка зависит от типа тестов. Основные инструменты в экосистеме Java:
Юнит-тестирование:
- JUnit 5 — стандарт де-факто. Поддерживает параметризованные тесты, расширения через
@ExtendWithи отложенное выполнение (assertAll). - TestNG — альтернатива с расширенными возможностями: группы тестов, зависимости, параллельный запуск из коробки.
Мокирование и изоляция:
- Mockito — наиболее популярный фреймворк для создания mock, stub и spy объектов. Позволяет проверять взаимодействия (
verify).
Интеграционное и E2E тестирование:
- Selenium WebDriver — для автоматизации UI веб-приложений. Управляет браузером через драйвер.
- REST Assured — DSL для тестирования REST API. Упрощает валидацию JSON/XML ответов и статус-кодов.
- Cucumber — для Behavior-Driven Development (BDD). Тесты пишутся на языке Gherkin в
.featureфайлах.
Типичные комбинации:
- Unit-тесты: JUnit 5 + Mockito.
- API-тесты: JUnit 5/TestNG + REST Assured.
- UI-тесты: JUnit 5/TestNG + Selenium WebDriver.
- BDD: Cucumber + JUnit (как раннер).
Пример unit-теста с JUnit 5 и Mockito:
@Test
@DisplayName("Should return user by id")
void shouldReturnUserById() {
// Arrange
User mockUser = new User(1L, "John");
when(userRepository.findById(1L)).thenReturn(Optional.of(mockUser));
// Act
User result = userService.getUserById(1L);
// Assert
assertEquals("John", result.getName());
verify(userRepository).findById(1L); // Проверка вызова
}
Пример теста API с REST Assured:
@Test
void testGetUserEndpoint() {
given()
.baseUri("https://api.example.com")
.param("id", 123)
.when()
.get("/users")
.then()
.statusCode(200)
.body("name", equalTo("Alice"))
.body("age", greaterThan(18));
}