将 junit testname 传递给 guice 注入对象
Pass junit testname into guice injected objects
我正在使用 junit 4 和用于注入的 guice 编写一个 webDriver 端到端测试框架。
我想将测试名称传递到我的 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)
您可以为此使用 BoundFieldModule
:
@Rule @Bind
public final TestName name = new TestName();
@Before
public void injectMembers() {
Guice.createInjector(
BoundFieldModule.of(this);
new TestModule())
.injectMembers(this);
}
我正在使用 junit 4 和用于注入的 guice 编写一个 webDriver 端到端测试框架。
我想将测试名称传递到我的 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)
您可以为此使用 BoundFieldModule
:
@Rule @Bind
public final TestName name = new TestName();
@Before
public void injectMembers() {
Guice.createInjector(
BoundFieldModule.of(this);
new TestModule())
.injectMembers(this);
}