Comment définir le chemin d'accès à mes fonctionnalités Cucumber à l'aide de concombre-junit ?

StackOverflow https://stackoverflow.com//questions/9663117

Question

J'essaie de construire mes premières spécifications exécutables avec Java et Maven.J'ai créé un projet simple avec cette structure :

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

Dans le test junit MyFeatureTest.java J'ai ceci:

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

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

Maintenant https://github.com/cucumber/cucumber-jvm/wiki/IDE-support dit que je devrais ajouter la ligne suivante :

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

J'ai essayé de modifier cela pour

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

mais l'annotation @Cucumber.Options n'est pas disponible du tout.Mon pom.xml a ces dépendances:

<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>

Est-ce que j'ai raté quelque chose ?

Mise à jour Il me manquait quelque chose :Le fichier de fonctionnalités du concombre doit être dans un sous-répertoire src/test/resources/mypackage/.Sinon, il ne sera pas récupéré par le test Junit.

Je peux exécuter mes tests de fonctionnalités lorsque je les mets dans le même répertoire src/main/test/, donc ce n'est pas un bloqueur pour moi.Mais j'aimerais comprendre toute la configuration.

Était-ce utile?

La solution

Jetez un oeil à ma question ici:

Vous pouvez spécifier un emplacement sur le chemin de classe en définissant l'attribut de fonctionnalité dans l'annotation des options comme

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

Modifier:

dans les nouvelles versions, le code est

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

Autres conseils

Le classpath n'est pas évidente dans la documentation de Cucumber (elle n'est pas non plus dans le JavaDoc), j'ai fini par la déduire du Documentation CLI, qui contient d'autres options de localisation documentées.Voir le List configuration options section dans la documentation.Il n'est pas non plus évident de savoir comment obtenir les définitions de fonctionnalités d'un autre module d'un projet Maven multi-modules.

C'est ce qui m'a permis de démarrer (à partir de l'IDE et de la ligne de commande) dans un projet multi-modules Maven.

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

où se trouvaient mes fichiers de fonctionnalités

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
        ...

Ça me fait plaisir de ne pas voir src/test/resources Sur le chemin.Notez qu'il n'y a pas de leader / Sur le chemin.L'utilisation du chemin de classe est moins fragile, car le chemin de classe (plutôt que le répertoire de travail actuel) doit être bien défini.

Vous pouvez utiliser

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

pour analyser tout le fichier de fonctionnalité dans le package

Ok, je ne peux mettre ça que lundi matin...La disposition des répertoires que j'ai utilisée n'était pas correcte, j'ai oublié de placer les fonctionnalités du concombre dans des sous-répertoires correspondant à la structure de mon package.

Assurez-vous de créer également les répertoires de packages nécessaires dans src/test/resources/!

Une fois que vous utilisez

import cucumber.api.CucumberOptions;

Vous devrez ajouter ce qui suit à votre pom.xml, sinon "mvn test" ne fonctionnera pas.Et vous ne pouvez exécuter vos tests qu'à partir de l'EDI.Voir: 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>

Ou vous pouvez simplement construire vos arguments concombreoptions, comme dans https://cucumber.io/docs/reference/jvm#cli-runner décrit et transmettez-le à concombre.api.cli.Main.run().Ceci est un petit exemple :

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

et utilisez-le dans votre test JUnit.Vous n'avez donc pas besoin de créer une classe distincte pour chaque classe de test uniquement avec d'autres arguments.

En plaçant le fichier de fonctionnalités sous src/test/java où le coureur et les étapes déposent ou en le mettant sous src/main/java le problème sera résolu.

N'oublie pas de dire merci.:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top