Главная · Скиллы · java-junit

java-junitOfficialJava JUnit GitHub Copilot

github/awesome-copilot

Java JUnit.

Установка

npx -y skills add github/awesome-copilot --skill java-junit --agent claude-code

JUnit 5+ — лучшие практики

Цель — помочь писать эффективные юнит-тесты на JUnit 5, охватывая как стандартный, так и data-driven подход.

Настройка проекта

  • Используйте стандартную структуру проекта Maven или Gradle.
  • Размещайте исходники тестов в src/test/java.
  • Включите зависимости junit-jupiter-api, junit-jupiter-engine и junit-jupiter-params для параметризованных тестов.
  • Запускайте тесты командами сборки: mvn test или gradle test.

Структура тестов

  • Классы тестов — с суффиксом Test, напр. CalculatorTest для класса Calculator.
  • Используйте @Test для тестовых методов.
  • Следуйте паттерну Arrange-Act-Assert (AAA).
  • Называйте тесты по описательному соглашению, напр. methodName_should_expectedBehavior_when_scenario.
  • Используйте @BeforeEach и @AfterEach для настройки/очистки на каждый тест.
  • Используйте @BeforeAll и @AfterAll для настройки/очистки на класс (статические методы).
  • Используйте @DisplayName для человекочитаемых имён классов и методов.

Стандартные тесты

  • Держите тесты сфокусированными на одном поведении.
  • Избегайте проверки нескольких условий в одном методе.
  • Делайте тесты независимыми и идемпотентными (любой порядок запуска).
  • Избегайте взаимозависимостей между тестами.

Data-driven (параметризованные) тесты

  • @ParameterizedTest — пометить метод как параметризованный.
  • @ValueSource — простые литеральные значения (строки, int и т.д.).
  • @MethodSource — ссылка на фабричный метод, дающий аргументы как Stream, Collection и т.д.
  • @CsvSource — инлайн значения через запятую.
  • @CsvFileSource — CSV-файл из classpath.
  • @EnumSource — константы enum.

Проверки (assertions)

  • Используйте статические методы из org.junit.jupiter.api.Assertions (assertEquals, assertTrue, assertNotNull).
  • Для более «текучих» и читаемых проверок рассмотрите AssertJ (assertThat(...).is...).
  • Используйте assertThrows или assertDoesNotThrow для проверки исключений.
  • Группируйте связанные проверки через assertAll, чтобы все проверились до падения теста.
  • Используйте описательные сообщения в проверках для ясности при сбое.

Мокирование и изоляция

  • Используйте мок-фреймворк вроде Mockito для моков зависимостей.
  • Используйте аннотации @Mock и @InjectMocks из Mockito для упрощения создания и внедрения моков.
  • Используйте интерфейсы для облегчения мокирования.

Организация тестов

  • Группируйте тесты по фиче/компоненту через пакеты.
  • Используйте @Tag для категоризации (@Tag("fast"), @Tag("integration")).
  • Используйте @TestMethodOrder(MethodOrderer.OrderAnnotation.class) и @Order для контроля порядка, когда это строго необходимо.
  • Используйте @Disabled, чтобы временно пропустить тест/класс, с указанием причины.
  • Используйте @Nested для группировки тестов во вложенном классе ради лучшей организации.

Из того же репозитория