Weiche Assertion in TestNG

Die Assertions in unseren Testsuiten sind notwendig, um das tatsächliche Ergebnis mit dem erwarteten Ergebnis zu verifizieren. Die von TestNG bereitgestellte Klasse Assert bietet eine Form der harten Assertion, bei der, sobald die Assertion fehlschlägt, die Ausführung der Testmethode angehalten und die Testmethode als Fehlschlag markiert wird.
In vielen Fällen kann es jedoch erforderlich sein, dass die Testmethode weiter ausgeführt wird, nachdem die erste Assertion-Anweisung fehlgeschlagen ist. Eine solche Anforderung ergibt sich, wenn wir mehrere Assertions in der Testmethode haben oder wenn wir eine zusätzliche Codezeile nach der Assertion-Anweisung ausführen möchten. TestNG bietet die SoftAssert-Klasse, um diese Fälle zu lösen.
SoftAssert softAssert = new SoftAssert();
Wenn wir SoftAssert verwenden, wird, wenn eine Assertion fehlschlägt, keine assertionException ausgelöst, sondern alle Anweisungen werden ausgeführt und später vergleicht der Test das Ergebnis aller Assertions und markiert den Testfall als bestanden oder fehlgeschlagen, basierend auf dem Ergebnis der Assertion.
In dem folgenden Codeschnipsel verwenden wir drei Assertions innerhalb der Testmethode. Die ersten beiden Anweisungen schlagen absichtlich fehl, dennoch wird die gesamte Testmethode durchgeführt. Die letzte Anweisung softAssert.assertAll() ist sehr wichtig. Sie vergleicht die Ergebnisse aller Assertions und kennzeichnet den Test als fehlgeschlagen, falls ein Fehler auftritt.
PS: Wenn wir softAssert.assertAll() nicht verwenden, wird der Testfall als erfolgreich markiert, auch wenn die Assertion fehlschlägt.
Inhaltsübersicht
@Test
public void softAssertionTest(){
//Creating softAssert object
SoftAssert softAssert = new SoftAssert();
//Assertion failing
softAssert.fail("Failing first assertion");
System.out.println("Failing 1");
//Assertion failing
softAssert.fail("Failing second assertion");
System.out.println("Failing 2");
//Assertion passing
softAssert.assertEquals(1, 1, "Passing third assertion");
System.out.println("Passing 3");
//Collates the assertion results and marks test as pass or fail
softAssert.assertAll();
}
Abgerufen von
Failing 1
Failing 2
Passing 3
Ausnahme bei Misserfolg
FAILED: softAssertionTest
java.lang.AssertionError: The following asserts failed:
Failing first assertion,
Failing second assertion
at org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:43)
.....
Hier können wir feststellen, dass die Konsolenausgabe alle Druckbefehle enthält, auch wenn die Assertions fehlschlagen. Aus den Assertion Reports können wir auch ersehen, dass zwei der drei Assertions fehlgeschlagen sind – Failing first assertion, Failing second assertion.