2017-02-14 2 views
0

Spring интеграционного теста загрузки выглядит следующим образом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(). Я хочу остановить Qpid только тогда, когда я уверен, что приложение весны закончило его остановку.

ответ

0

Принимая во внимание, что ConfigurableWebApplicationContext может быть впрыскиваемого в SpringBootTest, добавив эти строки в код решена проблема

static ConfigurableWebApplicationContext context 

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

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

Spring документы о stop method

остановить этот компонент, как правило, синхронно, так что компонент полностью останавливается после возврата этого метода.

JUnit AfterClass аннотированный метод должен быть статическим, поэтому @Autowired обходной путь с помощью метода SetContext.

1

Тест интеграции с Spring Boot может настроить ApplicationListener, который прослушивает ContextClosedEvent. Определите вложенный класс @TestConfiguration внутри класса тестирования, чтобы добавить компоненты в основную конфигурацию приложения.

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