75. Покрытие тестами метода calc #
🔥 Нужно продумать тесты для функции calc(a, b, operation) по документации.
/*
* Выполняет одну из операций "+", "-", "/", "*" для переданных параметров
* В любой непонятной ситуации, в т.ч. невозможность разделить нацело, бросается exception
*/
public Integer calc(Integer a, Integer b, String operation);
Спойлеры к решению
Подсказки
+, -, *, /.💡 Обработай граничные условия: деление на ноль, остаток от деления ≠ 0.
💡 Проверь
null-аргументы.💡 Проверь некорректный оператор (например,
"%", null, пустая строка).💡 Тестируй большие числа и переполнение.
💡 Используй JUnit 5 + AssertJ для удобных ассертов.
💡 Для исключений —
assertThrows.Решение
Набор тестов (примерно 10–12 штук):
Сложение:
calc(2, 3, "+") == 5.Вычитание:
calc(10, 4, "-") == 6.Умножение:
calc(6, 7, "*") == 42.Деление нацело:
calc(8, 2, "/") == 4.Деление с остатком:
calc(7, 2, "/")→ exception.Деление на ноль:
calc(5, 0, "/")→ exception.Неизвестная операция:
calc(5, 2, "%")→ exception.Оператор
null: → exception.Аргументы
null(a=nullилиb=null) → exception.Граничные значения:
calc(Integer.MAX_VALUE, 1, "+")→ exception или переполнение (проверка).Негативные числа:
calc(-3, -7, "*") == 21.Идемпотентность: повторный вызов с одинаковыми аргументами даёт тот же результат.
Пример JUnit 5 теста:
class CalcServiceTest {
private final CalcService service = new CalcService();
@Test
void shouldAddNumbers() {
assertThat(service.calc(2, 3, "+")).isEqualTo(5);
}
@Test
void shouldThrowWhenDividingByZero() {
assertThrows(ArithmeticException.class,
() -> service.calc(5, 0, "/"));
}
@Test
void shouldThrowOnUnsupportedOperation() {
assertThrows(IllegalArgumentException.class,
() -> service.calc(5, 2, "%"));
}
}
Покрытие позитивных и негативных сценариев.
Ясные названия тестов.
Используются
assertThrowsиassertThat.