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.

Utilizando los JUnit Hooks con el Cucumber CLI Runner

Intento ejecutar los archivos de características de Cucumber en paralelo utilizando el CLI Runner de Cucumber y actualmente estoy atascado tratando de averiguar cómo hacer que el gancho @BeforeClass de JUnit funcione con el CLI Runner.

En este momento, mi clase Runner de trabajo se ve así:

@RunWith(Cucumber.class)
@CucumberOptions(
    plugin = {
      "pretty",
      "html:target/reports/basic/report.html",
      "json:target/reports/cluecumber/cucumber.json",
      "timeline:target/reports/timeline"
    },
    tags = "@RegressionTests",
    snippets = SnippetType.CAMELCASE,
    stepNotifications = true,
    features = "classpath:features",
    glue = "my.steps.package")
public class RegressionTestsIT {

@BeforeClass
  public static void setup() {
    ContextHolder.setupTestContext();
  }
}

Y mi comando CLI se ve así:

java -cp "target/test-jar-with-dependencies.jar" io.cucumber.core.cli.Main -p "pretty" -p "html:target/reports/basic/report.html" -p "json:target/reports/cluecumber/cucumber.json" -p "timeline:target/reports/timeline" --threads 10 -g "my.steps.package" target/test-classes/features

Lo que sucede es que obtengo una NullPointerException en las pruebas porque el TestContext no se configuró correctamente, ya que el gancho no se ejecutó.

Intenté incluir tanto el paquete del Runner como la clase Runner en el pegamento y no funcionó.

También intenté hacer que mi Runner extendiera io.cucumber.core.cli.Main y luego ejecutar mi Runner en el CLI y, como era de esperar, tampoco funcionó, lamentablemente sigo obteniendo NPE.

Aunque este problema está relacionado con el uso del CLI Runner, estaría satisfecho con cualquier respuesta que me ayude a ejecutar varios archivos de características en paralelo, independientemente del método.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que el hook @BeforeClass de JUnit funcione con el Runner CLI de Cucumber, puedes crear una clase Runner de JUnit separada que extienda la clase io.cucumber.junit.Cucumber de Cucumber e incluya el hook @BeforeClass.

    Aquí tienes un ejemplo de cómo modificar tu clase Runner:

    @RunWith(CustomRunner.class)
    @CucumberOptions(
        plugin = {
          "pretty",
          "html:target/reports/basic/report.html",
          "json:target/reports/cluecumber/cucumber.json",
          "timeline:target/reports/timeline"
        },
        tags = "@RegressionTests",
        snippets = SnippetType.CAMELCASE,
        stepNotifications = true,
        features = "classpath:features",
        glue = "my.steps.package")
    public class RegressionTestsIT {
    }
    
    public class CustomRunner extends Cucumber {
      static {
        ContextHolder.setupTestContext();
      }
    }
    

    Luego, en tu comando de la línea de comandos (CLI), puedes referenciar la clase CustomRunner en lugar de la clase Cucumber:

    java -cp "target/test-jar-with-dependencies.jar" io.cucumber.core.cli.Main -p "pretty" -p "html:target/reports/basic/report.html" -p "json:target/reports/cluecumber/cucumber.json" -p "timeline:target/reports/timeline" --threads 10 -g "my.steps.package" CustomRunner
    

    Esto asegurará que el hook @BeforeClass se ejecute antes de que se ejecuten los archivos de características y ya no deberías obtener una NullPointerException.

Comments are closed.