2017-06-21 81 views
0

我正在編寫webDriver端到端測試框架,使用junit 4和guice進行注入。將junit testname傳遞給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); 

然後我就可以使用

testConfig.setTestName(System.getProperty("testName")); 
我TestModule構造函數中檢索此值

我嘗試了很多其他的方法,使我的testName可用於TestModule,我可以使它可用於其他類。這一切都基於同樣的原因:

我可以在這裏創建的測試模塊中設置一個字段,但是第一次注入TestModule時,它是第二個新實例,現在是第二個實例沒有正確的字段值注入。

我寧願另一種策略,而不是設置系統屬性,但我絕望地失敗了。任何人都可以建議更好的?

(如果其有關我正在我的測試並行地從搖籃)

+0

有沒有你不能把它傳遞到您的TestModule構造的原因嗎? –

+0

我確實嘗試過,但我無法使它工作。我想在嘗試注入新的TestModule時會導致循環引用問題 – AlexanderTheTester

+0

但是每個測試都應該有它自己的'TestModule',對吧? 「注入新的TestModule」意味着什麼? –

回答

0

您可以使用此BoundFieldModule

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


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