2012-03-12 56 views
12

我嘗試用Java和Maven構建我的第一個可執行規範。我創建了這個結構的簡單的項目:如何使用cucumber-junit設置我的黃瓜功能的路徑?

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> 

我錯過了什麼嗎?

更新我錯過了一些東西:黃瓜功能文件必須在子目錄src/test/resources/mypackage/。否則,它不會被junit測試所取代。

我可以運行我的功能測試時,我把它們放在同一目錄src/main/test/,所以它不是我的阻擋者。但我想了解整個設置。

回答

16

看看我的問題here:在新

您可以在選項註釋設置要素屬性類似

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

編輯指定classpath中的位置版本代碼是

@CucumberOptions(features="src/test/resources") 
4

好的,我只能把這個放在週一上午......我使用的目錄佈局不正確,我忘了將黃瓜特徵放入與我的包結構匹配的子目錄中。

確保您還在src/test/resources/中創建所需的包目錄!

7

您可以使用

@CucumberOptions(
    format = "pretty", 
    tags = {"[email protected]"}, 
    features = "src/test/resources/com/" //refer to Feature file 
) 

爲掃描所有文件的功能在包

+0

很好的建議,因爲@ Cucumber.Options從版本1.1.5棄用... http://xebee.xebia.in/index.php/ 2014/07/31/cucumber-jvm-all-you-need-to-know-about-cucumberoptions/ – 2015-05-24 18:48:08

+0

謝謝!正在嘗試@ Cucumber.Options已棄用 – 2015-05-26 14:30:00

+0

另一個感謝您展示新的@CucumberOptions! – 2015-07-29 15:58:52

1

一旦你使用

import cucumber.api.CucumberOptions; 

您需要將以下添加到您的pom.xml,否則「MVN測試「 不管用。你只能從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

或者您也可以建立自己的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測試。所以你不必爲每個測試類創建一個獨立的類,只需使用其他參數。

3

我很晚參加派對(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路徑。

+0

@Downvoter謹慎提及爲什麼? – markdsievers 2016-10-10 05:50:38

+0

這對我有用!注意:_no_前導'/'在路徑中,並且要麼指定目錄_or_包含文件擴展名的文件。 – ArtB 2017-08-22 14:31:13

-4

通過將功能下的文件的src/test/java下在亞軍和步驟文件或 通過將其下的src/main/java的問題將得到解決。

不要忘了說謝謝。:)