Soft Assertion v TestNG

Soft Assertion v TestNG
6 MIN
12 máj 2024

Tvrdenia (assertions) v našich testovacích súpravách sú potrebné na overenie skutočného výsledku s očakávaným výsledkom. Trieda Assert, ktorú poskytuje TestNG, poskytuje formu tvrdého tvrdenia, v ktorom sa hneď po zlyhaní tvrdenia vykonávanie danej testovacej metódy zastaví a testovacia metóda sa označí ako failure (zlyhanie).

Mnohokrát však môžeme požadovať, aby testovacia metóda pokračovala vo vykonávaní aj po zlyhaní prvého príkazu assertion. Takáto požiadavka vzniká, keď máme v testovacej metóde viacero tvrdení alebo keď chceme po príkaze tvrdenia vykonať nejaký ďalší riadok kódu. Na riešenie týchto prípadov poskytuje TestNG triedu SoftAssert.

SoftAssert softAssert = new SoftAssert();

Keď použijeme SoftAssert, v prípade zlyhania assertion sa nevyhodí assertionException, ale vykonajú sa všetky príkazy a neskôr test porovná výsledok všetkých assertion a na základe výsledku assertion označí testovací prípad ako úspešný alebo neúspešný.

V nasledujúcom úryvku kódu používame v rámci testovacej metódy tri tvrdenia. Prvé dve tvrdenia zámerne nevyhovujú, napriek tomu sa vykoná celá testovacia metóda. Posledný príkaz softAssert.assertAll() je veľmi dôležitý, porovná výsledky všetkých tvrdení a v prípade akéhokoľvek zlyhania označí test ako neúspešný.

PS: Ak nepoužijeme softAssert.assertAll(), potom bude testovací prípad označený ako úspešný aj v prípade zlyhania tvrdenia.

Obsah

@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();
}

Výstup

Failing 1
Failing 2
Passing 3

Výnimka pri zlyhaní

FAILED: softAssertionTest
java.lang.AssertionError: The following asserts failed:
 Failing first assertion,
 Failing second assertion
 at org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:43)
.....

Tu si môžeme všimnúť, že výstup konzoly obsahuje všetky tlačové príkazy, aj keď tvrdenia zlyhávajú. Taktiež môžeme vidieť, že z hlásení assertion vyplýva, že dve z troch assertion zlyhali – Failing first assertion, Failing second assertion.