将 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);
}