JavaとMavenを使用して、最初の実行可能仕様を構築しようとしました。この構造を持つ単純なプロジェクトを作成しました。
specification
|-src
|-test
|-Java
|-mypackage
|-MyFeatureTest.Java
|-resources
|-MyFeature.feature
JunitテストではMyFeatureTest.Java
にこれがあります:
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
public class HomepageTest {
}
https://github.com/cucumber/cucumber-jvm/wiki/IDE-support は、次の行を追加する必要があることを示しています。
@Cucumber.Options(paths={"my/super.feature:34"})
私はそれを修正しようとしました
@Cucumber.Options(paths={"src/test/resources/"})
ただし、注釈@Cucumber.Options
はまったく使用できません。私のpom.xml
には次の依存関係があります。
<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>
何か不足していますか?
Update何かが足りませんでした:キュウリの機能ファイルはサブディレクトリsrc/test/resources/mypackage/
にある必要があります。それ以外の場合は、junitテストで取得されません。
同じディレクトリsrc/main/test/
に機能テストを置くと、機能テストを実行できるので、ブロッカーではありません。しかし、セットアップ全体を理解したいと思います。
私の質問を見てください here :
次のようなオプションアノテーションで機能属性を設定することにより、クラスパス上の場所を指定できます。
@Cucumber.Options(features="src/test/resources")
編集:
新しいバージョンのコードは
@CucumberOptions(features="src/test/resources")
私はパーティーにかなり遅れています(4年!)が、誰もclasspath
評価について言及しておらず、上記の解決策がMavenマルチモジュールの状況で機能しなかったので、これは答えの価値があると思った。
classpath
オプションは、Cucumberのドキュメント(JavaDocにもありません)では明白ではありませんでしたが、他のロケーションオプションがドキュメント化されている CLI documentation から推測しました。 List configuration options
ドキュメントのセクション。
これが、Mavenマルチモジュールプロジェクトで(IDEおよびコマンドラインから)実行する)になった理由です。
@CucumberOptions(
features = {"classpath:product"},
//...
)
public class RunCukesTest extends AbstractTestNGSpringContextTests {
私の機能ファイルがあった場所
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
...
src/test/resources
のパス。
使用できます
@CucumberOptions(
format = "pretty",
tags = {"~@Ignore"},
features = "src/test/resources/com/" //refer to Feature file
)
パッケージ内のすべての機能ファイルをスキャンします
わかりました、これは月曜日の朝にしか配置できません...使用したディレクトリレイアウトが正しくありませんでした。パッケージ構造に一致するサブディレクトリにキュウリの機能を配置するのを忘れました。
src/test/resources/
!にも必要なパッケージディレクトリを作成してください
または、 https://cucumber.io/docs/reference/jvm#cli-runner のようにcucumberoptions引数を作成して、cucumber.api.cli.Main.run( )。これは小さな例です:
String arg = "classpath:MyFeature.feature --dry-run";
String[] args = arg.split(" ");
cucumber.api.cli.Main.run(args, Thread.currentThread().getContextClassLoader());
jUnitテストで使用します。したがって、他の引数を使用するだけで、各テストクラスに個別のクラスを作成する必要はありません。
使用したら
import cucumber.api.CucumberOptions;
以下をpom.xmlに追加する必要があります。そうしないと、「mvn test」が機能しません。また、テストはIDEからのみ実行できます。参照: 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>