我有一个使用Maven设置的Java项目,我正在使用Cucumber和jUnit进行测试。
也许我错过了什么,但是有没有办法设置我的Cucumber测试运行器来自动运行jUnit测试以及我的黄瓜功能?如果不必运行两个独立的测试套件,并使用mvn test
自动测试所有内容,那就太棒了。
目前,当我指定@RunWith(Cucumber.class)
时,它只查找.feature
个文件并忽略所有其他测试。
这是我的测试文件结构:
└── test
├── java
│ ├── TestRunner.java
│ └── com
│ └── myname
│ └── server
│ ├── GlobalHooks.java
│ ├── HTTPRequestsSteps.java
│ └── unitTests
│ ├── RequestHandlerTests.java
│ └── ServerTests.java
└── resources
└── cucumber
├── ... cucumber features here
我的测试运行器,目前只查找.feature
个文件。
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
@RunWith(Cucumber.class)
@CucumberOptions(plugin={"pretty"}, glue="com.rnelson.server", features="src/test/resources")
public class TestRunner {
}
我一直在寻找无济于事,所以任何帮助都将不胜感激。谢谢!
答案 0 :(得分:2)
这个Becca怎么样:
来自黄瓜官方文档:
JUnit Runner
JUnit运行器使用JUnit框架来运行Cucumber。所有你 need是一个带有注释的空类:
package mypackage;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;
@RunWith(Cucumber.class)
public class RunCukesTest {
}
您可以像运行其他JUnit测试一样运行此测试, 使用您的IDE或构建工具(例如mvn test)。
这对你也很有用:
http://www.hascode.com/2014/12/bdd-testing-with-cucumber-java-and-junit/
在这里,我正在做同样的事情,黄瓜运行Junit并且只需点击我们的Jenkins工作就会产生结果,xml Junit报告和html Cucumber报告......
如果您想要将测试也作为JUnit测试运行,则无法将Junit注释与Cucumber注释相结合。但你可以很容易地分开这两个类,然后用“mvn test”目标运行它们。
最后,我认为这是最后一个解决方案,但它应该可以工作,你也可以直接从代码中调用Junit测试,但这将是一个非常脏的,没有标准的解决方案......
JUnitCore junit = new JUnitCore();
Result result = junit.run(testClasses);
清楚吗? :)或者也许你需要的是不同的?
答案 1 :(得分:1)
这听起来像是对我的误解。
JUnit测试是使用JUnit编写的,将驻留在java类中。如果名称格式正确,那么它们将由Maven执行,以便由Maven测试运行员获取。
一个JUnit类使用@RunWith(Cucumber.class)
进行注释。它是一个运行Cucumber的JUnit类。这只是另一个Java类,但是这个类会搜索.feature
个文件并尝试执行它找到的文件。它的特殊之处在于它不允许您在其中定义任何方法。除此之外,它是一个常规的JUnit类,它将与任何其他JUnit类同时执行。
因此,所有测试类都将被选中并执行。其中一个将尝试运行您的黄瓜方案。
在同一个项目中有很多测试类没有任何矛盾。即使在同一个包装中。