Теперь Junit5 дает возможность утверждать исключения
Вы можете проверить как общие исключения и индивидуальные исключения
Общий сценарий исключение:
ExpectGeneralException.java
public void validateParameters(Integer param) {
if (param == null) {
throw new NullPointerException("Null parameters are not allowed");
}
}
ExpectGeneralExceptionTest.java
@Test
@DisplayName("Test assert NullPointerException")
void testGeneralException(TestInfo testInfo) {
final ExpectGeneralException generalEx = new ExpectGeneralException();
NullPointerException exception = assertThrows(NullPointerException.class,() -> {
generalEx.validateParameters(null);
});
assertEquals("Null parameters are not allowed", exception.getMessage());
}
Вы можете найти образец для тестирования CustomException здесь: assert exception code sample
ExpectCustomException.java
public String constructErrorMessage(String... args) throws InvalidParameterCountException {
if(args.length!=3) {
throw new InvalidParameterCountException("Invalid parametercount: expected=3, passed="+args.length);
}else {
String message = "";
for(String arg: args) {
message += arg;
}
return message;
}
}
ExpectCustomExceptionTest.java
@Test
@DisplayName("Test assert exception")
void testCustomException(TestInfo testInfo) {
final ExpectCustomException expectEx = new ExpectCustomException();
InvalidParameterCountException exception = assertThrows(InvalidParameterCountException.class,() -> {
expectEx.constructErrorMessage("sample ","error");
});
assertEquals("Invalid parametercount: expected=3, passed=2", exception.getMessage());
}
Из старой школы «Я не знаю много о Junit5 и, вероятно, недостаточно о Java8» ... это выглядит довольно странно. Не могли бы вы добавить еще несколько объяснений; как «в какой части есть фактический« производственный код »под тестом ... который должен был выбраться»? – GhostCat
'() ->' _points_ к выражению лямбда, которое принимает нулевые аргументы. Таким образом, «производственный код», который, как ожидается, генерирует исключение, находится в блоке кода _pointed to_ (т. Е. Оператор 'throw new ...' в фигурных скобках). –
Как правило, лямбда-выражение будет взаимодействовать с испытуемым объектом (SUT). Другими словами, прямое исключение, подобное выше, предназначено только для демонстрационных целей. –