Написание 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) - Проверены корректные входные данные
- Проверены некорректные / граничные входные данные
- Проверена обработка исключительных ситуаций
- Все тесты проходят (зелёный статус)