我编写了一组用于测试自定义框架的功能文件,并且希望允许测试框架接口的特定实现。我想使用不同的实现来运行很多功能。
为此,我创建了一个自定义ObjectFactory并使用PicoContainer依赖项注入传递实现。我将此工厂添加到了cumulum.properties文件,并且工作正常。唯一的问题是-如果我要测试一组以上的实现,该怎么办?
我可以创建多个ObjectFactories,但是如何在不同的工厂中多次运行测试?是否可以使用注释或类似方法将ObjectFactory实现传递给Runner类?我认为我可以使用JUnitRunner运行功能,如果可以在不同的工厂中使用其中的几个功能,它应该可以工作。但是,我找到的唯一指定ObjectFactory的选项是cumulage.options文件,它是模块的一个文件...
答案 0 :(得分:1)
当前在Cucumber中无法使用多个对象工厂。作为解决方案,您可以实现一个对象工厂,该对象工厂根据某些环境变量委派给另一个对象工厂。
您可能还想考虑使用cucumber-spring
而不是cucumber-pico
,因为cucumber-spring
可以从步骤定义中获取spring上下文配置注释。如果您像这样构造项目,则可以用最少的配置来完成:
| - runners
| | - CucumberConfigATest.java // @CucumberOptions(glue="steps", extraGlue="config.a")
| | - CucumberConfigBTest.java // @CucumberOptions(glue="steps", extraGlue="config.b")
| - steps
| | - SomeSteps.java
| | - MoreSteps.java
| - config
| | - a
| | | - StepsWithContextConfigA.java
| | - b
| | | - StepsWithContextConfigB.java
答案 1 :(得分:1)
@mpkorstanje也提供了我想出的答案。万一有人需要实现的示例-在这里:
@RunWith(Cucumber.class)
@CucumberOptions(features="src/test/resources")
public class MyRunner {
@BeforeClass
public static void setup(){
System.setProperty(EventProcessorPicoFactory.EVENT_BUS_HANDLER, IUserECNDataHandler.class.getName());
}
}
public class MyFactory {
public MyObject build() {
String type = System.getProperty("my.property.name");
switch (type) {
case "my.value":
return new MyObject();
default:
throw new IllegalArgumentException("not implemented");
}
}
}