有没有办法用我的Cucumber测试运行器运行常规的jUnit测试?

时间:2016-06-14 15:00:27

标签: java maven unit-testing junit cucumber

我有一个使用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 {
}

我一直在寻找无济于事,所以任何帮助都将不胜感激。谢谢!

2 个答案:

答案 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类同时执行。

因此,所有测试类都将被选中并执行。其中一个将尝试运行您的黄瓜方案。

在同一个项目中有很多测试类没有任何矛盾。即使在同一个包装中。