web-dev-qa-db-ja.com

cucumber-junitを使用してCucumber機能へのパスを設定するにはどうすればよいですか?

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/に機能テストを置くと、機能テストを実行できるので、ブロッカーではありません。しかし、セットアップ全体を理解したいと思います。

19
cringe

私の質問を見てください here

次のようなオプションアノテーションで機能属性を設定することにより、クラスパス上の場所を指定できます。

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

編集:

新しいバージョンのコードは

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

私はパーティーにかなり遅れています(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のパス。

13
markdsievers

使用できます

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

パッケージ内のすべての機能ファイルをスキャンします

7
Jewel

わかりました、これは月曜日の朝にしか配置できません...使用したディレクトリレイアウトが正しくありませんでした。パッケージ構造に一致するサブディレクトリにキュウリの機能を配置するのを忘れました。

src/test/resources/!にも必要なパッケージディレクトリを作成してください

5
cringe

または、 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テストで使用します。したがって、他の引数を使用するだけで、各テストクラスに個別のクラスを作成する必要はありません。

1
user24502

使用したら

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>
1
Robert Altena