Assertion souple dans TestNG

Assertion souple dans TestNG
MIN
12 Mai 2024

Les assertions dans nos suites de tests sont nécessaires pour vérifier le résultat réel par rapport au résultat attendu. La classe Assert fournie par TestNG offre une forme d’assertion dure dans laquelle, dès que l’assertion échoue, l’exécution de la méthode de test est arrêtée et la méthode de test est marquée comme un échec.

Cependant, il arrive souvent que la méthode de test doive continuer à s’exécuter après l’échec de la première déclaration d’assertion. Une telle exigence se présente lorsque nous avons plusieurs assertions dans la méthode de test ou lorsque nous voulons exécuter une ligne de code supplémentaire après l’énoncé de l’assertion. TestNG fournit la classe SoftAssert pour répondre à ces cas.

SoftAssert softAssert = new SoftAssert() ;

Lorsque nous utilisons SoftAssert, si une assertion échoue, l’exception d’assertion n’est pas levée, mais toutes les instructions sont exécutées et, plus tard, le test compare le résultat de toutes les assertions et marque le cas de test comme réussi ou échoué sur la base du résultat de l’assertion.

Dans l’extrait de code suivant, nous utilisons trois assertions dans la méthode de test. Les deux premiers énoncés échouent délibérément, mais l’ensemble de la méthode de test est exécuté. La dernière instruction softAssert.assertAll() est très importante, elle compare les résultats de toutes les assertions et marque l’échec du test en cas d’échec.

PS : Si nous n’utilisons pas softAssert.assertAll(), le cas de test sera marqué comme réussi même si l’assertion échoue.

Table des matières

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

Récupéré de

Failing 1
Failing 2
Passing 3

Exception en cas d’échec

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

Ici, nous pouvons remarquer que la sortie de la console contient toutes les commandes d’impression, même si les assertions échouent. Nous pouvons également voir dans les rapports d’assertion que deux des trois assertions ont échoué – la première assertion a échoué, la deuxième a échoué.