Domanda

Cerco di costruire le mie prime specifiche eseguibili con Java e Maven. Ho creato un semplice progetto con questa struttura:

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

Nel test di Junit MyFeatureTest.java ho questo:

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

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

ora https://github.com/cucumber/cucumber-jvm/wiki/ide-support < / a> dice che dovrei aggiungere la seguente riga:

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

Ho provato a modificarlo a

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

Ma l'annotazione @Cucumber.Options non è affatto disponibile. Il mio pom.xml ha queste dipendenze:

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

Sono manca qualcosa?

Aggiornamento Mi manca qualcosa: il file della funzione di cetriolo deve essere in una subdirectory src/test/resources/mypackage/. Altrimenti non verrà prelevato dal test di Junit.

Posso eseguire i test di funzionalità quando li metti nella stessa directory src/main/test/, quindi non è un bloccante per me. Ma mi piacerebbe capire l'intera configurazione.

È stato utile?

Soluzione

Dai un'occhiata alla mia domanda qui :

È possibile specificare una posizione sul classpath impostando l'attributo funzione nell'azione delle opzioni come

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

Modifica:

In New Versions Codice è

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

Altri suggerimenti

L'opzione classpath non è ovvia nella documentazione del cetriolo (non è nemmeno in Javadoc), ho finito per defuntarlo da Documentazione CLI , che ha altre opzioni di localizzazione documentate.Vedi la sezione List configuration options nei documenti.Inoltre, non è ovvio come ottenere le definizioni di funzionalità da un altro modulo di un projectG Multi Module Maveng.

Questo è ciò che mi ha fatto andare (in esecuzione da IDE e della riga di comando) in un progetto Multi Module Maven.

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

Dove sono stati trovati i file di funzionalità in

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

Mi piace non vedere src/test/resources nel percorso.Si noti che non ci sono generatori generatori principali nel percorso.L'utilizzo del classpath è meno fragile, poiché il classpath (piuttosto che la directory di lavoro corrente) deve essere ben definito.

Puoi usare

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

Per la scansione di tutto il file della funzione nel pacchetto

OK, posso solo mettere questo lunedì mattina ... il layout della directory che ho usato non è stato corretto, ho dimenticato di mettere le caratteristiche del cetriolo nelle sottodirectory corrispondenti alla mia struttura del pacchetto.

Assicurati di creare le directory dei pacchetti necessari anche in src/test/resources/!

Una volta utilizzato

import cucumber.api.CucumberOptions;
.

È necessario aggiungere quanto segue al tuo POM.XML, altrimenti "MVN Test" non funzionerà.E puoi eseguire solo i tuoi test dall'IDE. Vedi: https://github.com/cucumber/cuzumber-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 puoi semplicemente costruire i tuoi argomenti di cecumberopi, come in https://cucumber.io/ Docs / Riferimento / JVM # cli-runner descritto e passalo a cetriolo.api.api.cli.main.run ().Questo è un piccolo esempio:

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

e usalo in te Test di Junit.Quindi non devi creare una classe separata per ogni testClass solo con altri argomenti.

Mettendo il file feature in SRC / Test / Java dove il file Runner e Passaggi o Mettendolo sotto SRC / Main / Java Il problema verrà risolto.

Non dimenticare di dire Grazie . :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top