[英]How do I set the path to my Cucumber features using cucumber-junit?
我尝试使用 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>
我错过了什么吗?
更新我遗漏了一些东西:黄瓜功能文件必须在子目录src/test/resources/mypackage/
。 否则它不会被junit测试选中。
当我将它们放在同一目录src/main/test/
,我可以运行我的功能测试,所以它对我来说不是一个障碍。 但我想了解整个设置。
在这里看看我的问题:
您可以通过在选项注释中设置功能属性来指定类路径上的位置,例如
@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>
或者您可以构建您的黄瓜选项参数,如在https://cucumber.io/docs/reference/jvm#cli-runner 中描述的并将其传递给黄瓜.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 测试中使用它。 因此,您不必仅使用其他参数为每个测试类创建单独的类。
通过将功能文件放在src/test/java下运行程序和步骤文件或将其放在src/main/java 下,问题将得到解决。
别忘了说声谢谢。:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.