1. Обзор
В этом руководстве мы рассмотрим, как использовать утверждение о сбое JUnit для
распространенных сценариев тестирования.
Мы также увидим различия в методах fail()
между JUnit 4 и JUnit 5 . ``
2. Использование ошибочного
утверждения
Утверждение о сбое не проходит тест, безоговорочно
вызывая AssertionError .
При написании модульных тестов мы можем использовать fail
для явного создания ошибки при желаемых условиях тестирования. Давайте рассмотрим несколько случаев, когда это может быть полезно.
2.1. Неполный тест
Мы можем провалить тест, если он неполный или еще не реализован:
@Test
public void incompleteTest() {
fail("Not yet implemented");
}
2.2. Ожидаемое исключение
Мы также можем сделать это, когда думаем, что произойдет исключение:
@Test
public void expectedException() {
try {
methodThrowsException();
fail("Expected exception was not thrown");
} catch (Exception e) {
assertNotNull(e);
}
}
2.3. Неожиданное исключение
Еще одним вариантом является сбой теста, когда не ожидается, что будет выдано исключение:
@Test
public void unexpectedException() {
try {
safeMethod();
// more testing code
} catch (Exception e) {
fail("Unexpected exception was thrown");
}
}
2.4. Условия тестирования
Мы можем вызвать fail()
, когда результат не соответствует некоторому желаемому условию:
@Test
public void testingCondition() {
int result = randomInteger();
if(result > Integer.MAX_VALUE) {
fail("Result cannot exceed integer max value");
}
// more testing code
}
2.5. Возвращение раньше
Наконец, мы можем провалить тест, когда код не возвращается/не ломается, как ожидалось:
@Test
public void returnBefore() {
int value = randomInteger();
for (int i = 0; i < 5; i++) {
// returns when (value + i) is an even number
if ((i + value) % 2 == 0) {
return;
}
}
fail("Should have returned before");
}
3. Юнит 5 против Юнит 4
Все утверждения в JUnit 4 являются частью класса org.junit.Assert
. Для JUnit 5 они были перемещены в org.junit.jupiter.api.Assertions.
Когда мы вызываем fail
в JUnit 5 и получаем исключение, мы получаем AssertionFailedError
вместо AssertionError
, найденного в JUnit 4.
Наряду с fail()
и fail(String message)
JUnit 5 включает несколько полезных перегрузок:
сбой (выбрасываемая причина)
fail(строковое сообщение, причина Throwable)
fail(Supplier<String> messageSupplier)
Кроме того, все формы сбоя
объявляются как public static <V> V fail()
в JUnit 5. Общий тип возвращаемого значения V
позволяет использовать эти методы как один оператор в лямбда-выражениях:
Stream.of().map(entry -> fail("should not be called"));
4. Вывод
В этой статье мы рассмотрели некоторые практические варианты использования утверждения о сбое
в JUnit. См. Утверждения JUnit для всех доступных утверждений в JUnit 4 и JUnit 5 .
Мы также выделили основные различия между JUnit 4 и JUnit 5 и некоторые полезные усовершенствования метода fail
.
Как всегда, полный исходный код статьи доступен на GitHub .