Java
Модульные тесты на JUnit 5
Параметризованные тесты, проверка исключений, жизненный цикл и AssertJ-подобные утверждения.
Код
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@DisplayName("Калькулятор")
class CalculatorTest {
private Calculator calc;
@BeforeEach
void setUp() {
calc = new Calculator();
}
@Test
@DisplayName("Сложение двух положительных чисел")
void addsPositiveNumbers() {
assertEquals(5, calc.add(2, 3));
}
@ParameterizedTest(name = "{0} + {1} = {2}")
@CsvSource({"1, 1, 2", "0, 0, 0", "-1, 1, 0", "100, -50, 50"})
void addsVariousNumbers(int a, int b, int expected) {
assertEquals(expected, calc.add(a, b));
}
@ParameterizedTest
@ValueSource(strings = {"", " ", "\t"})
void rejectsBlankInput(String input) {
assertThrows(IllegalArgumentException.class, () -> calc.parse(input));
}
@Test
void divisionByZeroThrows() {
ArithmeticException ex = assertThrows(ArithmeticException.class,
() -> calc.divide(1, 0));
assertTrue(ex.getMessage().contains("ноль"));
}
@Test
void multipleAssertions() {
assertAll("результаты",
() -> assertEquals(4, calc.add(2, 2)),
() -> assertEquals(0, calc.subtract(2, 2)),
() -> assertIterableEquals(List.of(1, 2), calc.history()));
}
}