我编写了一组用于测试自定义框架的功能文件,我希望能够测试该框架的接口的特定实现。我想用不同的实现运行一大堆功能。
为此,我创建了一个自定义ObjectFactory,并使用PicoContainer依赖项注入传递实现。我将这个工厂添加到一个cucumber.properties文件中,它工作得很好。唯一的问题是--如果我有多组实现需要测试,该怎么办?
我可以创建多个ObjectFactories,但是如何对不同的工厂多次运行测试呢?可以使用注解或类似的方法将ObjectFactory实现传递给Runner类吗?我用JUnit runner运行特性,如果我可以用不同的工厂运行几个特性,我想它应该可以工作。然而,我找到的指定ObjectFactory的唯一选项是cucumber.options文件,这是一个模块的文件……
发布于 2019-03-07 03:12:58
目前,在Cucumber中不能使用多个对象工厂。作为变通办法,您可以实现单个对象工厂,该对象工厂根据某个环境变量委托给不同的对象工厂。
您可能还想考虑使用cucumber-spring而不是cucumber-pico,因为cucumber-spring可以从步骤定义中提取springs上下文配置注释。如果您的项目结构如下,则只需最少的配置即可完成此操作:
| - 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发布于 2019-03-07 04:01:00
@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");
}
}
}https://stackoverflow.com/questions/55026371
复制相似问题