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

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

Ответ

Экосистема тестирования Java включает библиотеки для разных уровней и типов тестов.

Фреймворки для модульного тестирования

  • JUnit 5 (Jupiter): Стандарт де-факто. Поддерживает аннотации (@Test, @BeforeEach, @ParameterizedTest), assertions и расширения.
    @Test
    @DisplayName("Сложение двух чисел")
    void additionTest() {
        assertEquals(4, 2 + 2, "2 + 2 должно равняться 4");
    }
  • TestNG: Альтернатива с расширенными функциями: группы тестов, зависимости, параметризация через @DataProvider.

Библиотеки для мокирования и проверок (Mocking/Stubbing)

  • Mockito: Наиболее популярная библиотека для создания мок-объектов, заглушек и проверки взаимодействий.
    @Test
    void mockitoExample() {
        List<String> mockedList = mock(List.class);
        when(mockedList.get(0)).thenReturn("first"); // Заглушка
        verify(mockedList).get(0); // Проверка вызова
    }
  • PowerMock: Расширяет Mockito и EasyMock, позволяя мокировать статические методы, конструкторы и final-классы (используйте с осторожностью, часто указывает на проблемы в дизайне).

Библиотеки утверждений (Assertions)

  • AssertJ: Предоставляет богатый fluent-API для утверждений, улучшая читаемость.
    assertThat(myList)
        .isNotEmpty()
        .hasSize(3)
        .contains("a", "b")
        .doesNotContain("z");
  • Hamcrest: Основан на матчерах (matchers), часто используется вместе с JUnit 4.

Библиотеки для интеграционного и end-to-end тестирования

  • Selenium / Selenide: Для автоматизации тестирования веб-интерфейсов.
  • REST Assured: Специализированная библиотека для тестирования REST API.
  • Testcontainers: Позволяет запускать базы данных, брокеры сообщений и другие сервисы в Docker-контейнерах для реалистичного интеграционного тестирования.