如何在 Cucumber 中配置 PicoContainer?
How to configure PicoContainer in Cucumber?
我想手动配置我的 picocontainer 为我的 cucumber 构建配置配置对象的实例。即,在 Spring 中提供配置对象 a-la @ConfigurationProperties
。
但是,不清楚如何操作。该网站提供了大量关于如何操作容器的文档,但没有围绕这些示例的上下文。我正在使用 Cucumber maven 构建,使用 cucumber-picocontainer
依赖项。
理想情况下,PicoContainer 能够从像 Spring 这样的主 yaml/ 配置文件中获取依赖项,但如果我可以手动将它们输入到 运行 容器中,那也可以。
为清楚起见,我知道我可以做到:
@RunWith(Cucumber.class)
public class RunWithCucumberTest{
public PicoContainer getContainer(){
MutablePicoContainer pico = new DefaultPicoContainer();
//do the config, inject onjects, etc
return pico;
}
}
但这并不意味着这个返回的实例实际上是用来注入我的属性的。
总而言之,我正在寻找一种使用 pico 容器来执行以下操作之一的方法:
- 自动能够创建配置 类,通过文件配置(
yaml
、properties
等)
- 手动配置 运行 容器,自己根据配置创建对象并将它们交给 pico 稍后注入
这些功能不可用。 Picocontainer 是一个非常简单的依赖注入框架,Cucumbers 对它的使用更加简单。要有效地使用它,请尽量不要像构建应用程序图那样使用它。而是用它来构造您用来测试应用程序的 API。
通常,您最终会包装无法实例化自身的对象以及无处不在的包装器。这不是很灵活,但通常不需要这种灵活性。您的步骤定义 + 支持 类 应该操纵被测应用程序。
如果这对您不起作用,您还可以使用 cucumber-guice
或 cucumber-spring
,它们分别使用 Guice 和 Spring 进行依赖注入。
您还可以推出自己的 PicoFactory
实现,它的代码量很小,如果它是唯一的 ObjectFactory
实现,它将自动使用。否则你可以使用 object-factory
property/option.
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
}
}
我想手动配置我的 picocontainer 为我的 cucumber 构建配置配置对象的实例。即,在 Spring 中提供配置对象 a-la @ConfigurationProperties
。
但是,不清楚如何操作。该网站提供了大量关于如何操作容器的文档,但没有围绕这些示例的上下文。我正在使用 Cucumber maven 构建,使用 cucumber-picocontainer
依赖项。
理想情况下,PicoContainer 能够从像 Spring 这样的主 yaml/ 配置文件中获取依赖项,但如果我可以手动将它们输入到 运行 容器中,那也可以。
为清楚起见,我知道我可以做到:
@RunWith(Cucumber.class)
public class RunWithCucumberTest{
public PicoContainer getContainer(){
MutablePicoContainer pico = new DefaultPicoContainer();
//do the config, inject onjects, etc
return pico;
}
}
但这并不意味着这个返回的实例实际上是用来注入我的属性的。
总而言之,我正在寻找一种使用 pico 容器来执行以下操作之一的方法:
- 自动能够创建配置 类,通过文件配置(
yaml
、properties
等) - 手动配置 运行 容器,自己根据配置创建对象并将它们交给 pico 稍后注入
这些功能不可用。 Picocontainer 是一个非常简单的依赖注入框架,Cucumbers 对它的使用更加简单。要有效地使用它,请尽量不要像构建应用程序图那样使用它。而是用它来构造您用来测试应用程序的 API。
通常,您最终会包装无法实例化自身的对象以及无处不在的包装器。这不是很灵活,但通常不需要这种灵活性。您的步骤定义 + 支持 类 应该操纵被测应用程序。
如果这对您不起作用,您还可以使用 cucumber-guice
或 cucumber-spring
,它们分别使用 Guice 和 Spring 进行依赖注入。
您还可以推出自己的 PicoFactory
实现,它的代码量很小,如果它是唯一的 ObjectFactory
实现,它将自动使用。否则你可以使用 object-factory
property/option.
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
}
}