web-dev-qa-db-ja.com

キュウリオプションアノテーション

Cucumber-jvm javadocs は、glue要素の目的は、ステップ定義とフックの場所を指定することであることを示しています。しかし、これは私にはうまくいかないようです。ディレクトリaに機能があり、ディレクトリbにステップ定義があるとしましょう。次に、

@Cucumber.Options(
        features= "directory_a", 
            glue="directory_b"
)

directory_aから機能ファイルをロードしますが、direct_bからステップ定義をロードしません。ただし、使用する場合

@Cucumber.Options(
        features= {"directory_a", "directory_b"}
)

次に、directory_aからの機能がロードされ、directory_bからのステップ定義も選択されます。これはまさに私が望むものですが、なぜ前者が機能していないのか分かりませんか? URIが異なる形式になっていることを期待していると関係があると思います(おそらくclasspath://またはそのようなものを追加する必要があります)が、ドキュメントでこれに関する情報を見つけることができません。

18
JustDanyul

私は次のようなものを正常に使用しました:

@RunWith(Cucumber.class)
@Cucumber.Options(
    //this code will only look into "features/" folder for features
    features={"classpath:features/"},
    glue = { "com.mycompany.cucumber.stepdefinitions", "com.mycompany.cucumber.hooks" },
    format = { "com.mycompany.cucumber.formatter.RuntimeInfoCatcher", "json:target/cucumber.json" },
    tags = { "@working" }
    )
public class CucumberStarterIT {
}

http://cukes.info/api/cucumber/jvm/javadoc/cucumber/api/junit/Cucumber.Options.html のドキュメントを見ると、タイプがString[]そのため、単一値のリストを与えない場合、「うまく」動作するとは考えられません。 glue={"directory_b"}そしてあなたのために何が起こるか見てください。

17
Dmitry Sharkov

私もこの問題を抱えていました...そして今のところ、それはseems

「機能」はファイルシステムパスを探しています:

features = "src/foo/bar"

一方、「glue」はパッケージ名を探しています:

glue = "foo.bar"

それらがなぜ異なるのかはわかりませんが、これは私にとってはうまくいっているようです。

6
Scott Bain

こんにちは私の知識によると、それはすべてあなたのプロジェクトの構造に依存します。たとえば、ルートレベルとStepDefinitionに「Directory_a」(機能ファイルを含むディレクトリ)を追加する場合、src> test> Java "Directory_b"と同じレベルのTestRunnerクラスでフックします(src> test> Java)in "Directory_c"

Dir_a | src | --- main | --- test | ------ Java | ------ Dir_b | ------ Dir_c

「Dir_c」にいるときに「Dir_b」と言うと、「Dir_b」または同じレベルのディレクトリが追加パスなしで識別されるため、glue = {「Dir_b」}になりますが、ディレクトリを見るとルートレベルからのパスを指定する必要がある機能ファイルが含まれています。この場合は、features = {"Dir_a"}または実際のパスを指定します。例:-"E:// Project_Name // Dir_a"

機能ディレクトリがルートレベルにない場合、「src/path to feature directory」のようなパスを指定してください。

それはうまく動作します:)

0
MUDITHA PERERA