Saltar al contenido

¿Es posible omitir un escenario con Cucumber-JVM en tiempo de ejecución?

Solución:

Me di cuenta de que esta es una actualización tardía de una pregunta ya respondida, pero quiero agregar una opción más compatible directamente con cucumber-jvm:

@Before //(cucumber one)
public void setup(){
    Assume.assumeTrue(weAreInPreProductionEnvironment);
}

“y el escenario se marcará como ignorado (pero la prueba pasará) si weAreInPreProductionEnvironment Es falso.”

Necesitarás agregar

import org.junit.Assume;

La principal diferencia con la respuesta aceptada es que JUnit asume que las fallas se comportan como pendientes

Importante Debido a una corrección de errores, necesitará la versión 1.2.5 de cucumber-jvm, que en el momento de escribir estas líneas es la más reciente. Por ejemplo, lo anterior generará una falla en lugar de una pendiente en cucumber-java8-1.2.3.jar

Realmente prefiero ser explícito sobre qué pruebas se están ejecutando, al tener definidas configuraciones de ejecución separadas para cada entorno. También me gusta mantener la cantidad de etiquetas que uso al mínimo, para mantener manejable la cantidad de configuraciones.

No creo que sea posible lograr lo que quieres solo con etiquetas. Debería escribir un corredor de prueba jUnit personalizado para usar en lugar de @RunWith (Cucumber.class). Eche un vistazo a la implementación de Cucumber para ver cómo funcionan las cosas. Debería modificar las RuntimeOptions creadas por RuntimeOptionsFactory para incluir / excluir etiquetas según el navegador u otra condición de tiempo de ejecución.

Alternativamente, podría considerar escribir un pequeño script que invoque su suite de prueba, creando una lista de etiquetas para incluir / excluir dinámicamente, dependiendo del entorno en el que se está ejecutando. Consideraría que esta es una solución más limpia y fácil de mantener.

De hecho, es muy fácil. Si profundiza en el código fuente de Cucumber-JVM y JUnit 4, encontrará que JUnit hace que saltar durante el tiempo de ejecución sea muy fácil (solo sin documentar).

Eche un vistazo al siguiente código fuente para JUnit 4 ParentRunner, que Cucumber-JVM’s FeatureRunner (que se usa en Cucumber, el corredor Pepino predeterminado):

@Override
public void run(final RunNotifier notifier) {
    EachTestNotifier testNotifier = new EachTestNotifier(notifier,
            getDescription());
    try {
        Statement statement = classBlock(notifier);
        statement.evaluate();
    } catch (AssumptionViolatedException e) {
        testNotifier.fireTestIgnored();
    } catch (StoppedByUserException e) {
        throw e;
    } catch (Throwable e) {
        testNotifier.addFailure(e);
    }
}

Así es como JUnit decide qué resultado mostrar. Si tiene éxito, mostrará un pase, pero es posible @Ignore en JUnit, entonces, ¿qué sucede en ese caso? Bueno, un AssumptionViolatedException es arrojado por el RunNotifier (o pepino FeatureRunner en este caso).

Entonces tu ejemplo se convierte en:

@Before("@skiponchrome") // this works
public void beforeScenario() {
  if(currentBrowser == 'chrome') { // this works
    throw new AssumptionViolatedException("Not supported on Chrome")
  }
}

Si ha usado vainilla JUnit 4 antes, lo recordaría @Ignore recibe un mensaje opcional que se muestra cuando el corredor ignora una prueba. AssumptionViolatedException lleva el mensaje, por lo que debería verlo en la salida de la prueba después de que se omita una prueba de esta manera sin tener que escribir su propio corredor personalizado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *