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.