Aserción suave en TestNG

Aserción suave en TestNG
MIN
12 May 2024

Las afirmaciones de nuestros conjuntos de pruebas son necesarias para verificar el resultado real con el resultado esperado. La clase Assert proporcionada por TestNG ofrece una forma de aserción dura en la que, en cuanto falla la aserción, se detiene la ejecución del método de prueba y éste se marca como fallido.

Muchas veces, sin embargo, podemos requerir que el método de prueba continúe su ejecución después de que falle la primera declaración de aserción. Este requisito surge cuando tenemos varias aserciones en el método de prueba o cuando queremos ejecutar alguna línea de código adicional después de la declaración de aserción. TestNG proporciona la clase SoftAssert para abordar estos casos.

SoftAssert softAssert = new SoftAssert();

Cuando utilizamos SoftAssert, si una aserción falla, no se lanza una assertionException, sino que se ejecutan todas las sentencias y, posteriormente, la prueba compara el resultado de todas las aserciones y marca el caso de prueba como correcto o incorrecto en función del resultado de la aserción.

En el siguiente fragmento de código, utilizamos tres aserciones dentro del método de prueba. Las dos primeras afirmaciones fallan deliberadamente, pero se realiza todo el método de prueba. La última sentencia softAssert.assertAll() es muy importante, ya que compara los resultados de todas las aserciones y marca la prueba como fallida en caso de que se produzca algún fallo.

PD: Si no utilizamos softAssert.assertAll(), el caso de prueba se marcará como correcto aunque falle la aserción.

Índice

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

Obtenido de

Failing 1
Failing 2
Passing 3

Excepción por fallo

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

Aquí podemos observar que la salida de la consola contiene todos los comandos de impresión, aunque fallen las aserciones. También podemos ver en los informes de aserción que fallaron dos de las tres aserciones: Falló la primera aserción, Falló la segunda aserción.