2017-02-13 4 views
5

Wie kann ich Spring-Abhängigkeitsinjektion in eine TestExecutionListener-Klasse verwenden, die ich geschrieben habe, die ExtendedTestExecutionListener erweitert?Spring Abhängigkeitsinjektion in Spring TestExecutionListeners funktioniert nicht

Spring DI scheint nicht mit TestExecutionListener-Klassen zu arbeiten. Beispiel der Ausgabe:

Die AbstractTestExecutionListener:

class SimpleClassTestListener extends AbstractTestExecutionListener { 

    @Autowired 
    protected String simplefield; // does not work simplefield = null 

    @Override 
    public void beforeTestClass(TestContext testContext) throws Exception { 
     System.out.println("simplefield " + simplefield); 
    } 
} 

Konfigurationsdatei:

@Configuration 
@ComponentScan(basePackages = { "com.example*" }) 
class SimpleConfig { 

    @Bean 
    public String simpleField() { 
     return "simpleField"; 
    } 

} 

Die JUnit-Testdatei:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { SimpleConfig.class }) 
@TestExecutionListeners(mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS, listeners = { 
    SimpleClassTestListener.class }) 
public class SimpleTest { 

    @Test 
    public void test(){ 
     assertTrue(); 
    } 
} 

Wie im Code Kommentar hervorgehoben, wenn ich führe das aus, es wird "simplefield null" drucken, weil simplefield nie g ets injiziert mit einem Wert.

+0

Ich habe auch @ComponentScan (basePackages = {"com.example *"}) in der Konfiguration hinzugefügt. –

+0

Ich benutze nicht gern testContext.getApplicationContext(). GetBean (...). –

+0

Ich sehe dieses Problem auch in einem neuen Projekt mit Spring Boot 1.5.2.RELEASE. –

Antwort

2

Fügen Sie einfach Autowiring für den gesamten TestExecutionListener hinzu.

@Override 
public void beforeTestClass(TestContext testContext) throws Exception { 
    testContext.getApplicationContext() 
      .getAutowireCapableBeanFactory() 
      .autowireBean(this); 
    // your code that uses autowired fields 
} 

Überprüfen Sie sample project in github.

Verwandte Themen