2017-02-22 8 views
0

状況:テスト結果を受け入れるサーバーがありますが、適切な承認とクライアント構成が与えられているだけです。だから、クライアントクラスをbeanとして書いて、正しい資格情報をapplication.propertiesからロードしました(同じ資格で、資格とバネのプロパティを持つデータベースに接続する)。私は今、このクライアントを使ってこれを行うtestngリスナーを書いています。私の研究をして、私は春のことは、AbstractTestExecutionListenerを拡張する必要があることがわかった。TestExecutionListenersでのSpringブートautowire依存性

@TestExecutionListeners(mergeMode = MergeMode.MERGE_WITH_DEFAULTS, listeners = {MyListener.class}) 
public abstract class MyTestParent extends AbstractTestNGSpringContextTests { //... 

I:私はこの@Autowired private MyClient client;のようにクラスのメンバとしての私のクライアントを、autowire場合

だから、私はこのように私のリスナーにそれを使用しようとただした場合、Beanは正しく作成されていることを見ることができます豆はautowiredではないことが分かります。これは、これらのリスナーが豆のように春の文脈の外でインスタンス化されていると私に信じさせます。

Springコンテキストから依存関係を結ぶことができるリスナー(springまたはtestngに固有)を書くにはどうすればよいですか?結果をデータベースなどの他の任意のテスト結果リポジトリにプッシュする場合はどうすればよいですか?

答えて

1

SpringはTestListenersの依存関係をautowireしません。 しかし、あなたがたBeanFactoryにアクセスし、リスナー自身をautowireするためにそれを使用することができます:

public class CustomTestExecutionListener extends AbstractTestExecutionListener { 

    @Autowired 
    TestSupport support; 

@Override 
public void beforeTestClass(TestContext testContext) throws Exception { 
    //get the beanfactory and use it to inject into this 
    testContext.getApplicationContext() 
      .getAutowireCapableBeanFactory() 
      .autowireBean(this); 

    //now use the autowired field 
    support.beforeClass(); 
} 

... }

+0

これは私がやってしまったものではありませんが、それは直接私の質問に答えません。ありがとうございました –

関連する問題