【问题标题】:Is there a way to run regular jUnit tests with my Cucumber test runner?有没有办法用我的 Cucumber 测试运行器运行常规的 jUnit 测试?
【发布时间】:2016-06-14 15:00:27
【问题描述】:

我有一个使用 Maven 设置的 Java 项目,我正在使用 Cucumber 和 jUnit 对其进行测试。

也许我遗漏了一些东西,但是有没有办法设置我的 Cucumber 测试运行器以自动运行 jUnit 测试以及我的 Cucumber 功能?不必运行两个单独的测试套件,并使用 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 {
}

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

【问题讨论】:

  • 您的 unitTests 不遵循 maven SureFire naming conventions(它们以 Tests 而不是 Test 结尾)。这可能是他们未被发现并因此未被mvn test 运行的原因吗?
  • 完美,这解决了我的问题。谢谢!!
  • @BeccaNelson 你得到这个工作了吗?即使我有类似的情况,但我不知道如何解决它?下面的答案对我没有帮助
  • 我的问题只是命名问题,正如@avandeursen 上面指出的那样。

标签: java maven unit-testing junit cucumber


【解决方案1】:

这个贝卡怎么样:

来自黄瓜官方文档:

JUnit 跑步者

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 并将生成结果,xml Junit 报告和 html Cucumber 报告,只需单击一下我们的 Jenkins 作业...

如果您的意思是还想将测试作为 JUnit 测试运行,则不能将 Junit 注释与 Cucumber 注释结合使用。但是您可以轻松地将两个类分开,然后以“mvn test”目标运行它们。

最后一件事,我认为这是最后一个解决方案,但它应该可以工作,你也可以直接从代码中调用 Junit 测试,但这将是一个非常肮脏且没有标准的解决方案......

JUnitCore junit = new JUnitCore();
Result result = junit.run(testClasses);

清楚吗? :) 或者你的需求不同?

【讨论】:

    【解决方案2】:

    这听起来像是我的误解。

    JUnit 测试是使用 JUnit 编写的,并将驻留在 java 类中。如果名称格式正确,它们将由 Maven 执行,以便被 Maven 测试运行程序拾取。

    一个 JUnit 类用 @RunWith(Cucumber.class) 注释。它是一个运行 Cucumber 的 JUnit 类。这只是另一个 Java 类,但该类搜索 .feature 文件并尝试执行它找到的那些。它的特别之处还在于它不允许您在其中定义任何方法。除此之外,它是一个常规的 JUnit 类,将与任何其他 JUnit 类同时执行。

    因此,所有测试类都将被拾取并执行。其中之一将尝试运行您的 Cucumber 场景。

    您在同一个项目中有许多测试类,这与您没有什么矛盾的。即使在同一个包中。

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多