Jetzt Junit5 bietet eine Möglichkeit, die Ausnahmen zu behaupten
Sie sowohl allgemeine Ausnahmen und maßgeschneiderte Ausnahmen testen können
Eine allgemeine Ausnahme Szenario:
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());
}
Sie eine Probe finden CustomException testen hier: 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());
}
Von einer alten Schule "Ich weiß nicht viel über Junit5 und wahrscheinlich nicht genug über Java8" ... das sieht ziemlich bizarr aus. Würde es Ihnen etwas ausmachen, weitere Erklärungen hinzuzufügen? wie "welcher Teil dort ist der tatsächliche 'Produktionscode', den man testen sollte ... der werfen sollte?" – GhostCat
'() ->' _points_ zu einem Lambda-Ausdruck, der keine Argumente akzeptiert. Somit ist der "Produktionscode", von dem erwartet wird, dass er die Ausnahme auslöst, in dem Codeblock _pointed to_ (d. H. Der Anweisung "throw new ..." in den geschweiften Klammern). –
Typischerweise würde die Lambda-Expression mit dem zu testenden Subjekt (SUT) interagieren. Mit anderen Worten, das direkte Auslösen einer Ausnahme wie oben ist nur zu Demonstrationszwecken gedacht. –