我有一点特殊情况。基本上我有一个单元测试,用@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注释。
有人可以帮忙吗?
答案 0 :(得分:2)
我无法提供您正在寻找的解决方案,但......
...您是否考虑过标记要手动运行的测试(例如使用@Manual
)?
然后,您可以取消注释@RunWith
注释,并通过将--tags ~@Manual
添加到您的Cucumber-JVM调用中来排除手动测试。
在手动JUnit调用中,您可以添加--tags @Manual