1

我编写了一组用于测试自定义框架的功能文件,并且我希望允许测试框架接口的特定实现。我想用不同的实现来运行很多功能。

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

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

4

2 回答 2

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

    }
于 2019-03-06T20:00:59.823 回答
1

目前不可能在 Cucumber 中使用多个对象工厂。作为一种解决方法,您可以实现一个对象工厂,该对象工厂根据某些环境变量委托给不同的对象工厂。

您可能还需要考虑使用cucumber-spring而不是cucumber-picoascucumber-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-06T19:12:57.560 回答