Вопрос с собеседования · Java

Как написать модульный тест на JUnit 5?

JuniorТестирование и логирование
Ещё спрашивают так:
  • Что такое @Test и assertEquals?
  • Как параметризовать тест в JUnit?
Коротко

Тест — метод с @Test в классе в src/test/java. Проверки — assertEquals(ожидаемое, фактическое), assertTrue, assertThrows для исключений; удобнее — AssertJ (assertThat(x).isEqualTo(5)). Подготовка — @BeforeEach. Один тест — одно поведение, имя описывает сценарий. Набор входов — @ParameterizedTest с @CsvSource. Зависимости подменяют Mockito (mock, when(...).thenReturn(...)).

  • Структура теста: given — when — then
  • Тест не зависит от порядка запуска и от других тестов
  • Модульный тест не ходит в сеть и базу — это интеграционные

А ещё Порядок аргументов assertEquals: сначала ожидаемое

Подробно

Пример:

class PriceTest {
    @Test
    void discountReducesPrice() {
        var price = new Price(100);
        assertEquals(90, price.withDiscount(10));
    }

    @Test
    void negativeDiscountRejected() {
        assertThrows(IllegalArgumentException.class,
            () -> new Price(100).withDiscount(-5));
    }

    @ParameterizedTest
    @CsvSource({"100,0,100", "100,50,50"})
    void table(int p, int d, int expected) {
        assertEquals(expected, new Price(p).withDiscount(d));
    }
}

Что хотят услышать

  • @Test, assert-методы, assertThrows.
  • @BeforeEach и given-when-then.
  • Параметризованные тесты.
  • Mockito для зависимостей.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Тесты пишут в методе main и проверяют вывод глазами
  • ✗Модульный тест должен обращаться к настоящей базе данных, иначе он ничего не проверяет
  • ✓Метод с @Test, проверки assertEquals и assertThrows, одно поведение на тест
  • ✗Тесты зависят от порядка запуска, это нормально

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования