Frage

Ich versuche, meine ersten ausführbaren Spezifikationen mit Java und Maven zu erstellen.Ich habe ein einfaches Projekt mit dieser Struktur erstellt:

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

Im Junit-Test MyFeatureTest.java Ich habe das:

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

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

Jetzt https://github.com/cucumber/cucumber-jvm/wiki/IDE-support sagt, dass ich die folgende Zeile hinzufügen soll:

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

Ich habe versucht, das zu ändern

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

aber die Anmerkung @Cucumber.Options ist überhaupt nicht verfügbar.Mein pom.xml hat diese Abhängigkeiten:

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

Vermisse ich etwas?

Aktualisieren Mir hat etwas gefehlt:Die Gurken-Feature-Datei muss sich in einem Unterverzeichnis befinden src/test/resources/mypackage/.Andernfalls wird es vom Junit-Test nicht erfasst.

Ich kann meine Funktionstests ausführen, wenn ich sie im selben Verzeichnis ablege src/main/test/, daher ist es für mich kein Blocker.Aber ich würde gerne den gesamten Aufbau verstehen.

War es hilfreich?

Lösung

Schauen Sie sich meine Frage an Hier:

Sie können einen Speicherort im Klassenpfad angeben, indem Sie das Feature-Attribut in der Optionsanmerkung festlegen, z. B

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

Bearbeiten:

in neuen Versionen ist der Code

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

Andere Tipps

Der classpath Da die Option in der Cucumber-Dokumentation nicht offensichtlich ist (sie steht auch nicht im JavaDoc), habe ich sie letztendlich aus dem abgeleitet CLI-Dokumentation, in dem weitere Standortoptionen dokumentiert sind.Siehe die List configuration options Abschnitt in den Dokumenten.Es ist auch nicht offensichtlich, wie man die Feature-Definitionen von einem anderen Modul eines Maven-Projekts mit mehreren Modulen erhält.

Das hat mich dazu gebracht, in einem Maven-Projekt mit mehreren Modulen loszulegen (von der IDE und der Befehlszeile aus).

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

wo sich meine Feature-Dateien befanden

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

Es macht mir Freude, es nicht zu sehen src/test/resources in dem Weg.Beachten Sie, dass es keinen Vorsprung gibt / in dem Weg.Die Verwendung des Klassenpfads ist weniger problematisch, da der Klassenpfad (und nicht das aktuelle Arbeitsverzeichnis) genau definiert sein muss.

Sie können verwenden

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

Zum Scannen aller Feature-Dateien im Paket

Ok, ich kann das nur auf Montagmorgen setzen ...Das von mir verwendete Verzeichnislayout war nicht korrekt. Ich habe vergessen, die Gurkenfunktionen in Unterverzeichnissen abzulegen, die meiner Paketstruktur entsprechen.

Stellen Sie sicher, dass Sie auch die erforderlichen Paketverzeichnisse erstellen src/test/resources/!

Sobald Sie es verwenden

import cucumber.api.CucumberOptions;

Sie müssen Folgendes zu Ihrer pom.xml hinzufügen, sonst funktioniert „mvn test“ nicht.Und Sie können Ihre Tests nur über die IDE ausführen.Sehen: 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>

Oder Sie könnten einfach Ihre Gurkeoptionsargumente aufbauen, wie in https://cucumber.io/docs/reference/jvm#cli-runner beschrieben und übergebe es angurke.api.cli.Main.run().Dies ist ein kleines Beispiel:

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

und verwenden Sie es in Ihrem JUnit-Test.Sie müssen also nicht für jede Testklasse eine eigene Klasse nur mit anderen Argumenten erstellen.

Indem Sie die Feature-Datei darunter ablegen src/test/java wo der Läufer und die Schritte Datei oder durch Einlegen von unterhalten src/main/java Das Problem wird gelöst.

Vergessen Sie nicht zu sagen Danke.:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top