2017-02-14 2 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()을 호출하기 전에. 나는 스프링 애플 리케이션이 멈춘 것을 확신 할 때에 만 Qpid를 멈추고 싶다.

답변

0

일반적 stop method

정지 대해 문제를 코드에이 라인을 추가 ConfigurableWebApplicationContextSpringBootTest 주입 될 수 있음을 고려이 컴포넌트

static ConfigurableWebApplicationContext context 

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

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

스프링 문서 해결 복용 동기 방식으로이 방법을 반환하면 구성 요소가 완전히 중지됩니다.

의 JUnit AfterClass 주석 방법은 setContext 방법에 따라서 @Autowired 해결 정적이어야한다.

1

스프링 부트 통합 테스트에서는 ContextClosedEvent을 수신하는 ApplicationListener을 구성 할 수 있습니다. 테스트 클래스 내에 중첩 된 @TestConfiguration 클래스를 정의하여 응용 프로그램의 기본 구성에 bean을 추가하십시오.

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