2012-03-12 14 views
12

Intento crear mis primeras especificaciones ejecutables con Java y Maven. He creado un proyecto sencillo con esta estructura:¿Cómo configuro la ruta a mis funciones de pepino usando pepino-junit?

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 debería añadir la siguiente línea:

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

Traté de modificar eso a

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

pero la anotación @Cucumber.Options no está disponible en absoluto. Mi pom.xml tiene esta 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 algo?

Actualización Me faltaba algo: El archivo de características del pepino tiene que estar en un subdirectorio src/test/resources/mypackage/. De lo contrario, no será recogido por la prueba junit.

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

Respuesta

16

Echa un vistazo a mi pregunta here:

Puede especificar una ubicación en la ruta de clase estableciendo el atributo de entidad en la anotación opciones como

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

Editar:

de nuevo el código de las versiones es

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

Ok, solo puedo poner esto el lunes por la mañana ... El diseño del directorio que utilicé no era correcto, olvidé poner las características del pepino en subdirectorios que coincidían con la estructura de mi paquete.

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

7

Puede utilizar

@CucumberOptions(
    format = "pretty", 
    tags = {"[email protected]"}, 
    features = "src/test/resources/com/" //refer to Feature file 
) 

para escaneado todos archivo función en el paquete

+0

buena sugerencia desde @ Cucumber.Options es obsoleto desde la versión 1.1.5 ... http://xebee.xebia.in/index.php/ 2014/07/31/pepino-jvm-todo-lo-necesitas-saber-sobre-pepinoopciones/ –

+0

¡Gracias! Estaba intentando @Cucumber.Options, que está en desuso –

+0

¡Gracias otra vez por mostrar el nuevo @CucumberOptions! –

1

Una vez que utilice

import cucumber.api.CucumberOptions; 

Usted tendrá que añadir lo siguiente a su pom.xml, de lo contrario "mvn test " no trabajará. Y solo 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> 
1

O usted podría construir sus cucumberoptions argumentos, como en https://cucumber.io/docs/reference/jvm#cli-runner descrito y pasarlo a cucumber.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 úsala en tu JUnit Test. Por lo tanto, no tiene que crear una clase separada para cada clase de prueba solo con otros argumentos.

3

Llego bastante tarde a la fiesta (¡4 años!) Pero pensé que valía la pena responder ya que nadie mencionó la evaluación classpath y las soluciones anteriores no funcionaron en una situación de múltiples módulos Maven.

La opción classpath no era obvia en la documentación de Cucumber (tampoco en JavaDoc), terminé por inferirla de CLI documentation, que tiene otras opciones de ubicación documentadas. Consulte la sección List configuration options en los documentos.

Esto es lo que me puso en marcha (corriendo desde IDE y línea de comandos) en un proyecto de varios módulos de Maven.

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

donde mis archivos de características se encuentran en

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 satisface para no ver src/test/resources en el camino.

+0

@Downvoter importa mencionar por qué? – markdsievers

+0

¡Esto funcionó para mí! Nota: _no_ conduce '/' en la ruta y especifica el directorio _o_ el archivo, incluida la extensión del archivo. – ArtB

-4

Al poner el archivo de función en src/test/java donde file el corredor y los pasos o poniéndolo bajo src/main/java el problema se resolverá.

No olvide decir gracias. :)

Cuestiones relacionadas