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

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

Ответ

Имею практический опыт работы со стеком современных библиотек для модульного, интеграционного и 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.