黄瓜的多个 ObjectFactory 实例

Multiple ObjectFactory instances for cucumber

我编写了一组用于测试自定义框架的功能文件,我想允许测试框架接口的特定实现。我想要 运行 具有不同实现的大量功能。

为此,我创建了一个自定义 ObjectFactory 并使用 PicoContainer 依赖项注入传递实现。我将这个工厂添加到 cucumber.properties 文件中,它工作得很好。唯一的问题是——如果我要测试不止一组实现怎么办?

我可以创建多个 ObjectFactories,但是如何 运行 对不同的工厂进行多次测试?是否可以使用注释或类似方式将 ObjectFactory 实现传递给 Runner class?我 运行 使用 JUnit 运行ner 的特性,如果我可以在不同的工厂中使用它们中的几个,我认为它应该可以工作。但是,我发现指定 ObjectFactory 的唯一选项是 cucumber.options 文件,它是一个模块...

目前无法在 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

@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");
            }
        }   

    }