Написание unit-теста для метода класса приложения

Сложность: medium Тема: TES
junit unit-тесты модульное тестирование аннотации

Контекст задачи

Unit-тестирование — это первый и самый эффективный уровень тестирования в пирамиде тестов. Модульные тесты позволяют быстро обнаружить регрессию ещё на этапе разработки, не запуская всю систему. Каждый unit-тест проверяет один метод, один сценарий — он должен быть изолированным, быстрым и воспроизводимым. Без unit-тестов каждая правка кода — это лотерея.

Формулировка

Напишите набор unit-тестов (JUnit 5) для одного из методов класса вашей программы. Обеспечьте покрытие всех основных сценариев: корректные входные данные, граничные значения, некорректные данные и исключительные ситуации.

Ожидаемый результат

  • Класс тестов в папке src/test/java, использующий JUnit 5
  • Методы тестирования с аннотациями @Test
  • Подготовительный метод @BeforeEach и метод очистки @AfterEach
  • Проверки через assertEquals, assertTrue, assertThrows
  • Прохождение всех тестов (зелёные тесты)

Инструментарий

Методы и подходы:

  • Аннотации JUnit 5: @Test, @BeforeEach, @AfterEach, @Ignore, @Disabled
  • Ассерты: assertEquals, assertTrue, assertFalse, assertNull, assertSame, assertThrows
  • Проверка исключений: assertThrows(NotFoundException.class, () -> method())
  • Проверка таймаута: @Test(timeout = 1000)
  • Подготовка тестового окружения в @BeforeEach
  • Разделение папок: src/main/java — код, src/test/java — тесты

Инструменты:

  • IntelliJ IDEA (автогенерация тестов: Alt+Enter → «Create Test»)
  • JUnit 5 (Jupiter)
  • Maven/Gradle для управления зависимостями

Навигатор

  • [Документация JUnit 5]
  • [Инструкция по созданию тестов]
  • [Пример тестирования калькулятора]
  • Вопрос: Какие три самых разных набора входных данных могут пройти через ваш метод, и какие результаты ожидаются для каждого?
  • Пример:
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {
    private Calculator calculator;

    @BeforeEach
    void setUp() {
        calculator = new Calculator();
    }

    @Test
    void testAdd() {
        assertEquals(6, calculator.add(3, 3));
    }

    @Test
    void testDivideByZero() {
        assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0));
    }
}

📝 Критерии оценки

  • Тестовый класс создан в src/test/java с использованием JUnit 5
  • Использована аннотация @BeforeEach для подготовки тестового окружения
  • Использована аннотация @Test для каждого тестового метода
  • Применимы как минимум три разных ассерта (assertEquals, assertTrue, assertThrows)
  • Проверены корректные входные данные
  • Проверены некорректные / граничные входные данные
  • Проверена обработка исключительных ситуаций
  • Все тесты проходят (зелёный статус)