2

我有一点特殊情况。基本上我有一个单元测试,用@Test 注释,在那个测试中我需要执行一个 Cucumber JVM 测试类。

为什么?很长的故事。与类加载器和 RoboGuice 有关,它不是很重要,但它确实限制了我能做什么和不能做什么。

下面是测试方法:

@Test
public void runCucumberFeature() throws Exception {
    Cucumber cucumber = new Cucumber(MyCucumberTest.class);
    cucumber.run(new RunNotifier());
}

MyCucumberTest 是我创建的一个类,注释如下:

//@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"}, strict=true)
public class MyCucumberTest {
    // Empty, as required by Cucumber JVM
}

为什么我注释掉了@RunWith 注释?因为如果我不这样做,Cucumber 测试运行程序将拿起测试并运行它,这是我不想要的,因为我正在手动运行测试。

问题是上述方法不起作用。看起来 Cucumber 正在查找功能文件,它正在验证 MyCucumberTest 是否包含 @Givens 等,它甚至会打印出测试,就好像它正在运行它一样。

但事实并非如此。在@Given、@When 和@Then 方法中没有执行任何代码。我不确定为什么会这样,但我有一个模糊的想法,即 Cucumber JVM 测试运行器不想执行代码,因为该类没有使用 @RunWith 注释。

任何人都可以帮忙吗?

4

1 回答 1

2

我无法提供您正在寻找的解决方案,但是......

...您是否考虑过标记要手动运行的测试(例如使用@Manual)?

然后您可以取消注释您的注释并通过添加到您的 Cucumber-JVM 调用来@RunWith排除手动测试。--tags ~@Manual

在您的手动 JUnit 调用中,您可以添加--tags @Manual

于 2012-07-26T09:01:15.637 回答