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");
});
davy.ai
Para lograr el comportamiento esperado, podemos usar un bloque try-catch en el método
@After
para verificar si la afirmaciónThen
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:En el método
@After
, pasamos el objetoScenario
como parámetro. Luego, usamos un bloque try-catch para capturar cualquier excepción lanzada por el métodoscenario.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ónThen
pasa. Si la afirmación falla, registraremos un mensaje en lugar de eliminar los datos, lo que nos permitirá investigar la falla.