将junit testname传递给guice注入的对象

时间:2017-06-21 12:54:28

标签: java junit4 guice saucelabs

我正在编写一个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并行运行我的测试)

1 个答案:

答案 0 :(得分:0)

您可以使用BoundFieldModule

@Rule @Bind
public final TestName name = new TestName();


@Before
public void injectMembers() {
  Guice.createInjector(
      BoundFieldModule.of(this);
      new TestModule())
      .injectMembers(this);
}