Вопрос с собеседования · 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 минут бесплатно.