Pregunta

Intento crear mis primeras especificaciones ejecutables con Java y Maven.Creé un proyecto simple con esta estructura:

specification
|-src
  |-test
    |-java
      |-mypackage
        |-MyFeatureTest.java
    |-resources
      |-MyFeature.feature

en la prueba junit MyFeatureTest.java Tengo esto:

import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;

@RunWith(Cucumber.class)
public class HomepageTest {
}

Ahora https://github.com/cucumber/cucumber-jvm/wiki/IDE-support dice que debo agregar la siguiente línea:

@Cucumber.Options(paths={"my/super.feature:34"})

Intenté modificar eso para

@Cucumber.Options(paths={"src/test/resources/"})

pero la anotación @Cucumber.Options no está disponible en absoluto.Mi pom.xml tiene estas dependencias:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.10</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>info.cukes</groupId>
  <artifactId>cucumber-java</artifactId>
  <version>1.0.0.RC20</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>info.cukes</groupId>
  <artifactId>cucumber-junit</artifactId>
  <version>1.0.0.RC20</version>
  <scope>test</scope>
</dependency>

¿Me estoy perdiendo de algo?

Actualizar Me faltaba algo:El archivo de características del pepino debe estar en un subdirectorio. src/test/resources/mypackage/.De lo contrario, la prueba junit no lo detectará.

Puedo ejecutar mis pruebas de funciones cuando las coloco en el mismo directorio src/main/test/, entonces no es un bloqueador para mí.Pero me gustaría entender toda la configuración.

¿Fue útil?

Solución

Echa un vistazo a mi pregunta aquí:

Puede especificar una ubicación en el classpath configurando el atributo de característica en la anotación de opciones como

@Cucumber.Options(features="src/test/resources")

Editar:

en las nuevas versiones el código es

@CucumberOptions(features="src/test/resources")

Otros consejos

El classpath La opción no es obvia en la documentación de Cucumber (tampoco está en el JavaDoc), terminé deduciéndola del Documentación CLI, que tiene otras opciones de ubicación documentadas.Ver el List configuration options sección en los documentos.Tampoco es obvio cómo obtener las definiciones de funciones de otro módulo de un proyecto Maven de múltiples módulos.

Esto es lo que me impulsó (ejecutando desde IDE y línea de comando) en un proyecto de múltiples módulos de Maven.

@CucumberOptions(
        features = {"classpath:product"},
        //...
)
public class RunCukesTest extends AbstractTestNGSpringContextTests {

donde estaban ubicados mis archivos de características

main-project
    sub-module-1
        src/test/java/com/foo/
            RunCukesTest.java
        src/test/resources/product/
            feature_1.feature
            feature_2.feature
    sub-module-2
        ...

Me agrada no ver src/test/resources en el camino.Tenga en cuenta que no hay guía / en el camino.Usar el classpath es menos frágil, porque el classpath (en lugar del directorio de trabajo actual) debe estar bien definido.

Puedes usar

@CucumberOptions(
    format = "pretty",
    tags = {"~@Ignore"},
    features = "src/test/resources/com/"  //refer to Feature file
)

para escanear todos los archivos de características en el paquete

Ok, sólo puedo poner esto el lunes por la mañana...El diseño del directorio que utilicé no era correcto, olvidé colocar las funciones del pepino en subdirectorios que coincidieran con la estructura de mi paquete.

Asegúrese de crear los directorios de paquetes necesarios también en src/test/resources/!

Una vez que uses

import cucumber.api.CucumberOptions;

Deberá agregar lo siguiente a su pom.xml; de lo contrario, la "prueba mvn" no funcionará.Y sólo puedes ejecutar tus pruebas desde el IDE.Ver: https://github.com/cucumber/cucumber-java-skeleton/blob/master/pom.xml

<properties>
    <java.version>1.7</java.version>
    <junit.version>4.12</junit.version>
    <cucumber.version>1.2.2</cucumber.version>
    <maven.compiler.version>3.3</maven.compiler.version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <configuration>
                <encoding>UTF-8</encoding>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <compilerArgument>-Werror</compilerArgument>
            </configuration>
        </plugin>
    </plugins>
</build>

O simplemente podrías construir tus argumentos de opciones de pepino, como en https://cucumber.io/docs/reference/jvm#cli-runner descrito y páselo a pepino.api.cli.Main.run().Este es un pequeño ejemplo:

String arg = "classpath:MyFeature.feature --dry-run";
String[] args = arg.split(" ");
cucumber.api.cli.Main.run(args, Thread.currentThread().getContextClassLoader());

y úselo en su prueba JUnit.Por lo tanto, no es necesario crear una clase separada para cada clase de prueba solo con otros argumentos.

Al colocar el archivo de características en src/prueba/java donde el corredor y los pasos archivan o colocándolo src/principal/java el problema se resolverá.

No olvides decir gracias.:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top