2017-06-21 6 views
0

Ich schreibe ein WebDriver Ende zu Ende Test-Framework mit Junit 4 und Guice für die Injektion.Pass junit testname in guice injizierte Objekte

Ich mag die Testnamen in mein driverFactory passieren, damit ich es verwenden, um den Test ordnungsgemäß in Saucelabs zu nennen:
in meinem AbstractTest (von derzeit alle Tests verwendet) Ich verwende

@Rule 
    public TestName name = new TestName(); 

und

@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); 

dann kann ich diesen Wert aus meinem Testmodule Konstruktor abrufen

testConfig.setTestName(System.getProperty("testName")); 
mit

Ich habe viele andere Ansätze ausprobiert, um meinen testName dem TestModul zur Verfügung zu stellen, wo ich ihn anderen Klassen zur Verfügung stellen kann. Das alles fällt aus dem gleichen Grund aus:

Ich kann ein Feld in dem hier erstellten Testmodul festlegen, aber das erste Mal, dass ein TestModul injiziert wird, ist es zweite neue Instanz und es ist diese zweite Instanz, die jetzt ist ohne den richtigen Feldwert injiziert.

Ich würde eine andere Strategie als das Setzen einer Systemeigenschaft bevorzugen, aber ich scheiterte hoffnungslos. Kann jemand etwas besseres vorschlagen?

(Wenn seine einschlägigen ich meine Tests parallel von Gradle läuft)

+0

Gibt es einen Grund, warum Sie es nicht in Ihrem Testmodule Konstruktor übergeben kann? –

+0

Ich habe es versucht, aber ich konnte es nicht funktionieren lassen. Ich denke, es verursachte ein zirkuläres Referenzproblem beim Versuch, ein neues Testmodul zu injizieren. – AlexanderTheTester

+0

Aber jeder Test sollte sein eigenes "TestModul" haben, richtig? Was meinst du mit "spritze ein neues TestModul"? –

Antwort

0

Sie können für diesen Einsatz BoundFieldModule:

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


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