2017-02-14 6 views
0

春ブート統合テストは、したがって、このはSpringBootTest:ブートアプリケーションが

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = Application) 
class IntegrationTest { 

    static QpidRunner qpidRunner 

    @BeforeClass 
    static void init() { 
    qpidRunner = new QpidRunner() 
    qpidRunner.start() 
    } 

    @AfterClass 
    static void tearDown() { 
    qpidRunner.stop() 
    } 

} 

のように見え行われたときに知っているか、Qpidインスタンスは、前に実行し、すべてのテストの後にダウンtearedされます。 qpidRunner.stop()を呼び出す前に、春の起動アプリケーションがまだ動作しているかどうかを確認する方法があるかどうかを知りたいです。私は春のアプリが停止を完了したと確信しているときだけ、Qpidを停止したい。

答えて

0

コードにこの行を追加し、ConfigurableWebApplicationContextSpringBootTestに注入することができることを考慮は、典型的には、stop method

static ConfigurableWebApplicationContext context 

@Autowired 
void setContext(ConfigurableWebApplicationContext context) { 
    AbstractDocsIntegrationTest.context = context 
} 

@AfterClass 
static void tearDown() { 
    context.stop() 
    qpidRunner.stop() 
} 

スプリングドキュメントはこのコンポーネントを停止し、問題を解決しこの方法の復帰時に コンポーネントが完全に停止するように同期的に実行します。

のJUnit AfterClass注釈付きメソッドは、したがって、静的である必要があり@Autowired setContext方法と問題を回避。

1

スプリングブートの統合テストでは、ContextClosedEventをリッスンするApplicationListenerを構成できます。テストクラス内にネストされた@TestConfigurationクラスを定義して、アプリケーションの主構成にBeanを追加します。

@TestConfiguration 
static class MyConfiguration { 
    @Bean 
    public ApplicationListener<ContextClosedEvent> contextClosedEventListener() { 
    return event -> qpidRunner.stop(); 
    } 
} 
関連する問題