Come posso impostare il percorso per le mie funzionalità di cetriolo usando il cetriolo-junit?
-
12-12-2019 - |
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 {
}
.
Ho provato a modificarlo a
.
@Cucumber.Options(paths={"src/test/resources/"})
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 . :)