Sie können beliebige eigene Aussagen basierend auf Aussagen von junit erstellen, da diese speziell für die Erstellung benutzerdefinierter Aussagen entwickelt wurden, die genau wie junit-Aussagen funktionieren sollen:
static void assertDoesNotThrow(Executable executable) {
assertDoesNotThrow(executable, "darf nicht geworfen werden");
}
static void assertDoesNotThrow(Executable executable, String message) {
try {
executable.execute();
} catch (Throwable err) {
fail(message);
}
}
Jetzt testen wir das sogenannte Szenario methodMustNotThrow und protokollieren alle Fehler im junit-Stil:
//testen und protokollieren mit Standard- und benutzerdefinierten Nachrichten
//das folgende wird erfolgreich sein
assertDoesNotThrow(()->methodMustNotThrow(1));
assertDoesNotThrow(()->methodMustNotThrow(1), "benutzerdefinierter Facepalm");
//das folgende wird fehlschlagen
assertDoesNotThrow(()->methodMustNotThrow(2));
assertDoesNotThrow(()-> {throw new Exception("Hallo Welt");}, "Nachricht");
//Siehe Implementierung von methodMustNotThrow unten
Im Allgemeinen besteht die Möglichkeit, sofort in jedem Szenario, an jedem Ort, an dem es sinnvoll ist, durch Aufrufen von fail(someMessage)
zu scheitern, was genau für diesen Zweck vorgesehen ist. Verwenden Sie es beispielsweise in einem try/catch-Block, um zu versagen, wenn im Testfall etwas geworfen wird:
try{methodMustNotThrow(1);}catch(Throwable e){fail("darf nicht geworfen werden");}
try{methodMustNotThrow(1);}catch(Throwable e){Assertions.fail("darf nicht geworfen werden");}
Dies ist das Beispiel für die Methode, die wir testen, vorausgesetzt, wir haben eine solche Methode, die unter bestimmten Umständen nicht fehlschlagen darf, aber fehlschlagen kann:
void methodMustNotThrow(int x) throws Exception {
if (x == 1) return;
throw new Exception();
}
Die obige Methode ist ein einfaches Beispiel. Aber dies funktioniert auch für komplexe Situationen, in denen der Fehler nicht so offensichtlich ist. Hier sind die Imports:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import static org.junit.jupiter.api.Assertions.*;