gpt4 book ai didi

java - 配置 guice 进行基本字段注入(inject),无需 main 方法

转载 作者:行者123 更新时间:2023-12-01 16:47:02 27 4
gpt4 key购买 nike

我最近一直在研究 guice,并且需要在我的自动化框架中进行一些字段注入(inject)。例如,我有一个 EnvironmentSetter 类,我想将其作为单例注入(inject)到各种其他类中。

1)我没有标准的 main 方法,所以我正在努力解决如何正确引导 guice 的问题。我正在使用 testNG,因此我尝试使用静态 block 进行引导,如下所示:

public class TestExecutionListener implements IExecutionListener {
private static final Logger LOG = LogManager.getLogger(TestExecutionListener.class);


static {
Bootstrapper.BootStrapGuiceDI();
}

@Inject
EnvironmentSetter env;

@Override
public void onExecutionStart() {
LOG.debug("Starting test run!");
env.generateEnvironmentProperties();
}

@Override
public void onExecutionFinish() {
LOG.debug("Finished test run!");
}

}

我还创建了以下内容:

public class EnvironmentSetterModule extends AbstractModule {
@Override
protected void configure() {
bind(EnvironmentSetter.class);
}
}

这就是我从静态 block 中调用的内容:

public static void BootStrapGuiceDI() {
LOG.debug("Bootstrapping");
Injector injector = Guice.createInjector(new Module());
EnvironmentSetter env = injector.getInstance(EnvironmentSetter.class);
}

在这种情况下,我注入(inject)的EnvironmentSetter env仍然为空,我需要什么才能有效地使用它?

EnvironmentSetter 类:

public class EnvironmentSetter implements IEnvironmentPopulator {
private static final Logger LOG = LogManager.getLogger(EnvironmentSetter.class);

PropertyProvider properties = PropertyProvider.INSTANCE;


public EnvironmentSetter() {

}

public void generateEnvironmentProperties() {
Properties props = new Properties();
properties.getAllProperties().forEach((k,v) -> props.setProperty(k,v));
try {
File f = new File("target\\allure-results\\environment.properties");
f.getParentFile().mkdirs();
f.createNewFile();
props.store(new FileOutputStream(f), "Allure Environment Properties");
} catch(IOException ioe) {
LOG.fatal(ioe);
}
}
}

最佳答案

您应该添加在 createInejector 方法中创建的模块,而不是 new Module();

public static void BootStrapGuiceDI() {
LOG.debug("Bootstrapping");
// Injector injector = Guice.createInjector(new Module()); // use your module (EnvironmentSetterModule )
// Now, guice will be able to "see" your class
Injector injector = Guice.createInjector(new EnvironmentSetterModule());
EnvironmentSetter env = injector.getInstance(EnvironmentSetter.class);
}

此外,仅引导它不会使其自动注入(inject)测试类中各处的所有字段,要在测试中注入(inject),您可以使用新的 Injector 并注入(inject)测试类 的成员insertMembers(this),其中 this 将引用您的测试实例,因此必须在某个设置 block 上执行。查看 guice 上的文档,了解如何在 Test => Guice BoundFields 上正确启动它。

关于java - 配置 guice 进行基本字段注入(inject),无需 main 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48611253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com