es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No ejecutar el gancho @After(“@tag”) si la afirmación falla.

Tengo el siguiente escenario en Java BDD:

  • Una etiqueta que creará algunos datos: <code>@Before</code> que creará algunos datos antes de ejecutar los pasos de prueba.
  • Caso de prueba con pasos: <code>Scenario</code> con la etiqueta @DeleteData.
  • Etiqueta After que eliminará los datos <code>@After("@DeleteData)</code>

*Actual: * <code>@After("DeleteData)</code> se ejecuta incluso si mi aserción Then falla.

*Expected: * No se debe ejecutar el método <code>@After("@DeleteData)</code>. Se deben eliminar los datos para investigar.

¿Alguna ayuda para lograr esto?


@DeleteData
Scenario:
Given User is at FB login page
When User logs in
Then Success message is displayed: Logged in successfully

Hooks.java </p>

<p>@Before("DeleteData)
public void before() {
 // Create some data
}</p>

<p>@After("DeleteData)
public void after() {
 // delete data
}
<code>
</code>
StepFile.java</p>

<p>Given("^User is at FB login page$", () -> {
 // Login logic
});</p>

<p>When("^User logs in$", () -> {
 // Login logic
});</p>

<p>The("^Success message is displayed: (.*)$", (String msg) -> {
 assertThat(msg).isEqualTo("Logged in successfully");
});
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el comportamiento esperado, podemos usar un bloque try-catch en el método @After para verificar si la afirmación Then falla. Si la afirmación falla, podemos capturar la excepción y registrar un mensaje en lugar de eliminar los datos.

    Aquí está el archivo Hooks.java actualizado:

    @Before("@DeleteData")
    public void before() {
     // Crear algunos datos
    }
    
    @After("@DeleteData")
    public void after(Scenario scenario) {
     try {
       scenario.isFailed(); // esto lanzará una excepción si el escenario falla
     } catch (Exception e) {
       System.out.println("La prueba falló, no se eliminan los datos");
       return; // salir del método sin eliminar los datos
     }
     // eliminar datos
    }
    

    En el método @After, pasamos el objeto Scenario como parámetro. Luego, usamos un bloque try-catch para capturar cualquier excepción lanzada por el método scenario.isFailed(). Si la prueba falla, este método lanzará una excepción, que capturamos y registramos un mensaje en lugar de eliminar los datos. Si la prueba pasa, eliminamos los datos como de costumbre.

    Con estos cambios, el método @After solo eliminará los datos si la afirmación Then pasa. Si la afirmación falla, registraremos un mensaje en lugar de eliminar los datos, lo que nos permitirá investigar la falla.

Comments are closed.