Несколько экземпляров ObjectFactory для огурца - PullRequest
1 голос
/ 06 марта 2019

Я написал набор файлов функций для тестирования пользовательского фреймворка и хочу разрешить тестирование конкретных реализаций интерфейсов фреймворка.Я хочу запустить множество функций с различными реализациями.

Для этого я создал пользовательскую ObjectFactory и передал реализации, используя внедрение зависимостей PicoContainer.Я добавил эту фабрику в файл cucumber.properties, и он работает просто отлично.Единственная проблема - что если у меня есть более одного набора реализаций для тестирования?

Я могу создать несколько объектных фабрик, но как я могу запустить тесты несколько раз на разных фабриках?Можно ли передать реализацию ObjectFactory в класс Runner, используя аннотации или что-то подобное?Я запускаю функции с помощью JUnit Runner, и если у меня может быть несколько из них на разных фабриках, я думаю, это должно работать.Однако единственная опция для указания ObjectFactory, которую я нашел, это файл cucumber.options, который является одним для модуля ...

Ответы [ 2 ]

1 голос
/ 06 марта 2019

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

    }
1 голос
/ 06 марта 2019

В настоящее время невозможно использовать несколько объектных фабрик в Cucumber.В качестве обходного пути вы можете реализовать одну фабрику объектов, которая делегирует другую фабрику объектов в зависимости от некоторой переменной среды.

Вы также можете рассмотреть возможность использования cucumber-spring вместо cucumber-pico, поскольку cucumber-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
...