cucumber-junit を使用して Cucumber 機能へのパスを設定するにはどうすればよいですか?
-
12-12-2019 - |
質問
Java と Maven を使用して最初の実行可能仕様を構築しようとします。次の構造を持つ単純なプロジェクトを作成しました。
specification
|-src
|-test
|-java
|-mypackage
|-MyFeatureTest.java
|-resources
|-MyFeature.feature
ジュニアテストでは 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>
何かが足りないのでしょうか?
アップデート 何かが足りませんでした:cucumber フィーチャー ファイルはサブディレクトリに存在する必要があります src/test/resources/mypackage/
. 。そうしないと、junit テストで検出されません。
機能テストを同じディレクトリに置くと実行できる src/main/test/
, したがって、それは私にとってブロッカーではありません。しかし、全体の設定を理解したいと思っています。
解決
私の質問を見てください ここ:
次のようにオプション アノテーションで feature 属性を設定することで、クラスパス上の場所を指定できます。
@Cucumber.Options(features="src/test/resources")
編集:
新しいバージョンのコードは
@CucumberOptions(features="src/test/resources")
他のヒント
の classpath
このオプションは、Cucumber のドキュメントでは明らかではありません (JavaDoc にもありません)。結局、 CLI ドキュメント, 、他の場所のオプションが文書化されています。を参照してください。 List configuration options
ドキュメントのセクション。また、マルチモジュール Maven プロジェクトの別のモジュールから機能定義を取得する方法も明らかではありません。
これが、私が 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
)
パッケージ内のすべての機能ファイルをスキャンする場合
わかりました、これを投稿できるのは月曜の朝だけです...使用したディレクトリ レイアウトが正しくありませんでした。パッケージ構造に一致するサブディレクトリに cucumber 機能を配置するのを忘れていました。
必要なパッケージ ディレクトリも必ず作成してください。 src/test/resources/
!
一度使用すると
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>
または、次のように cucumberoptions 引数を構築することもできます。 https://cucumber.io/docs/reference/jvm#cli-runner を記述し、それを 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 テストで使用します。したがって、他の引数だけを使用してテストクラスごとに個別のクラスを作成する必要はありません。
機能ファイルを以下に置くことで、 ソース/テスト/Java ランナーとステップをファイルする場所、またはそれを下に置くことによって ソース/メイン/Java 問題は解決されるでしょう。
言うことを忘れないでください ありがとう.:)