Ответ
Имею практический опыт работы со стеком современных библиотек для модульного, интеграционного и end-to-end тестирования.
Основной стек:
| Библиотека | Назначение | Пример использования |
|---|---|---|
| JUnit 5 | Фреймворк для модульного тестирования. | @Test, @ParameterizedTest, @Nested, assertAll. |
| Mockito | Создание мок-объектов и шпионов для изоляции тестов. | mock(), spy(), verify(), ArgumentCaptor. |
| AssertJ | Fluent-assertions для читаемых проверок. | assertThat(actual).isEqualTo(expected).hasSize(5); |
| Testcontainers | Интеграционные тесты с реальными БД и сервисами в Docker. | @Container static PostgreSQLContainer<?> postgres = ... |
Пример комплексного теста:
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void getUserName_ShouldReturnName_WhenUserExists() {
// Given (Подготовка)
Long userId = 1L;
User mockUser = new User(userId, "Alice");
when(userRepository.findById(userId)).thenReturn(Optional.of(mockUser));
// When (Действие)
String result = userService.getUserName(userId);
// Then (Проверка)
assertThat(result).isEqualTo("Alice");
verify(userRepository).findById(userId); // Проверяем вызов
}
@ParameterizedTest
@CsvSource({"1, Alice", "2, Bob"})
void getUserName_Parameterized(Long id, String expectedName) {
// ... параметризованный тест для разных входных данных
}
}
Также знаком с WireMock для мокирования HTTP-сервисов, RestAssured для тестирования REST API и Cucumber для BDD.