2017-02-14 76 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實例之前運行所有測試後撕開了下來。我想知道是否有方法在調用qpidRunner.stop()之前檢查spring引導應用程序是否仍在運行。只有當我確信春季應用已經完成停止時,我纔想停止Qpid。

回答

0

考慮到ConfigurableWebApplicationContext可以在SpringBootTest注射,添加此行的代碼解決了這個問題

static ConfigurableWebApplicationContext context 

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

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

彈簧文檔約stop method

停止該組件,典型地以同步方式,使得組件在返回該方法時完全停止。

的JUnit AfterClass註解的方法必須是靜態的,因此@Autowired解決方法與setContext方法。

1

Spring Boot集成測試可以配置一個ApplicationListener,它會監聽ContextClosedEvent。在測試類中定義一個嵌套的@TestConfiguration類,以將Bean添加到應用程序的主配置中。

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