Soft Assertion v TestNG

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.