2017-02-13 14 views
5

Spring依存性注入をTestExecutionListenerクラスに使用するにはどうすればよいですか?AbstractTestExecutionListenerを拡張して記述しましたか?SpringへのSpring依存性注入TestExecutionListenerが機能しない

Spring DIがTestExecutionListenerクラスで動作しないようです。問題の 例:

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

設定ファイル:

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

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

} 

JUnitテストファイル:

コードコメントで強調されているよう
@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(); 
    } 
} 

、Iをシンプルフィールドは決してgではないので、これを実行すると、 "simplefield null"が出力されますetsに値を挿入します。

+0

また、構成に@ComponentScan(basePackages = {"com.example *"})を追加しました。 –

+0

私はtestContext.getApplicationContext()。getBean(...)を使いたくありません。 –

+0

私はこの問題もSpring Boot 1.5.2.RELEASEの新しいプロジェクトで見ています。 –

答えて

2

TestExecutionListener全体の自動配線を追加するだけです。

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

チェックsample project in github

関連する問題