Java

Модульные тесты на JUnit 5

Algonexys · 07.08.2026 · 👁 0

Параметризованные тесты, проверка исключений, жизненный цикл и 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()));
    }
}