我正在编写一个webDriver端到端测试框架,使用junit 4和guice进行注入。
我想将测试名称传递给我的driverFactory,以便我可以使用它在Saucelabs中正确命名测试:
在我的AbstractTest中(当前所有测试都使用)我使用
@Rule
public TestName name = new TestName();
和
@Before
public void before() {
System.setProperty("testName", name.getMethodName());
// This is unfortunately, the only way I have managed to make the test name available to the configuration factory
Guice.createInjector(new TestModule()).injectMembers(this);
然后我可以使用
从我的TestModule构造函数中检索此值 testConfig.setTestName(System.getProperty("testName"));
我尝试了许多其他方法使我的testName可用于TestModule,我可以将其提供给其他类。所有人都因为基本相同的原因而垮台:
我可以在这里创建的测试模块中设置一个字段,但第一次注入TestModule时,它是第二个新实例,现在注入的第二个实例没有正确的字段值。
我宁愿采用另一种策略而不是设置系统属性,但我绝望地失败了。任何人都可以提出更好的建议吗?
(如果相关我正在从Gradle并行运行我的测试)
答案 0 :(得分:0)
您可以使用BoundFieldModule
:
@Rule @Bind
public final TestName name = new TestName();
@Before
public void injectMembers() {
Guice.createInjector(
BoundFieldModule.of(this);
new TestModule())
.injectMembers(this);
}