Как настроить PicoContainer в огурце? - PullRequest
0 голосов
/ 28 февраля 2020

Я бы хотел вручную настроить мой picocontainer для настройки экземпляров объектов конфигурации для моей сборки огурца. IE, предоставляющий конфигурационные объекты а-ля @ConfigurationProperties в Spring.

Однако не ясно, как это сделать. Веб-сайт предоставляет много документации о том, как манипулировать контейнером, но не содержит контекста, окружающего эти примеры. Я использую сборку Cucumber maven, используя зависимость cucumber-picocontainer.

В идеале PicoContainer сможет выбирать зависимости из основного файла yaml / config, такого как Spring, но если я смогу вручную ввести их в работающий контейнер, который тоже работает.

Для ясности я знаю, что могу сделать:

@RunWith(Cucumber.class)
public class RunWithCucumberTest{

    public PicoContainer getContainer(){
        MutablePicoContainer pico = new DefaultPicoContainer();
        //do the config, inject onjects, etc

        return pico;
    }
}

Но это не значит, что экземпляр, возвращаемый этим, на самом деле используется для добавления моих свойств.

В заключение, я ищу способ использовать пико-контейнер для выполнения одного из следующих действий:

  • , чтобы автоматически создавать классы конфигурации, настроенные с помощью файла (yaml, properties, et c)
  • Сконфигурируйте запущенный контейнер вручную, создав объекты из конфигурации самостоятельно и предоставив им пико для последующего внедрения

1 Ответ

0 голосов
/ 28 февраля 2020

Эти функции недоступны. Picocontainer - очень простая структура внедрения зависимостей, и использование Cucumbers еще проще. Чтобы использовать его эффективно, старайтесь не использовать его так, как если бы вы строили граф приложений. Скорее используйте его для создания API, который вы используете для тестирования вашего приложения.

Как правило, в конечном итоге вы оборачиваете объекты, которые не могут создавать экземпляры самих себя и этих оболочек повсюду. Это не очень гибко, но обычно эта гибкость не требуется. Ваши определения шагов + классы поддержки должны манипулировать тестируемым приложением.

Если это не работает, вы также можете использовать cucumber-guice или cucumber-spring, которые используют Guice и Spring для внедрения зависимостей соответственно.

Вы также можете свернуть свою собственную реализацию PicoFactory, это тривиальный объем кода, и, если это единственная реализация ObjectFactory, она будет использоваться автоматически. В противном случае вы можете использовать object-factory свойство / параметр.

public class Configuration {

    private final Properties someProperties = new Properties();

    public Configuration() throws IOException {
        someProperties.load(Properties.class.getResourceAsStream("some.properties"));
    }

    public String entryPoint() {
        return someProperties.getProperty("example.entry-point", "localhost:7070/entry");
    }

}

public class StepDefinitions {

    private final Configuration configuration;
    private Application application;

    public StepDefinitions(Configuration configuration) {
        this.configuration = configuration;
    }

    @Given("a thing is done")
    public void aThingIsDone(){
        String entryPoint = configuration.entryPoint();
        this.application = //... create application with entry point
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...