Weiche Assertion in TestNG

Weiche Assertion in TestNG
MIN
12 Mai 2024

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.