2017-05-24 1 views
2

JMS 메시지 (@JmsListener)를받는 Spring 애플리케이션을 빌드했다. 개발 중에 청취자가 청취하는 JMS 대기열에 일부 메시지를 보내려고 일부 메시지 (JmsTemplate)를 전송하는 단위 테스트를 작성했습니다. 이 단위 테스트에서는 응용 프로그램 컨텍스트 (데이터 소스 등의 bean)를로드하기 위해 @SpringBootTest@RunWith(SpringRunner.class)을 사용합니다.유닛 테스트에서 JMS 소비 빈을 사용하지 않는다.

그러나 단위 테스트가 시작되면 jms 리스너 빈을로드하여 직접 새 메시지를 소비하기 시작합니다.

메시지가 대기열에 추가되도록이 테스트 시나리오에서이 jms 수신기를 비활성화하고 싶습니다. 그런 다음 나중에 주 응용 프로그램을 시작하고 소비되는 것을 볼 수 있습니다.

어떻게 접근해야합니까?

나는 또한 내가 어떻게 콩을 일반적으로 무력화시킬 수 있는지 물어볼 수 있었다고 생각한다.

미리 감사드립니다.

답변

4

프로필을 사용하면이 문제를 해결할 수 있습니다. 프로파일은 "시험없이-jmslistener는"하지 활성화합니다 (경우에만이 빈의 인스턴스를 생성해야

@Profile("!test-without-jmslistener") 
public class JmsListenerBean { 
    ... 
} 

이 봄을 알려줍니다

당신의 청취자에게

@Profile 주석을 추가 느낌표는 조건을 무효로합니다). 당신의 단위 테스트 클래스에

, 다음과 같은 주석을 추가 :

@ActiveProfiles("test-without-jmslistener) 
public class MyTest { 
    ... 
} 

이제 봄 테스트 러너는 테스트를 실행하기 전에이 프로파일을 활성화하고, 스프링은 빈을로드 할 수 없습니다.

+0

감사합니다. Rolf 님, 감사합니다. – codesmith

0

이 문제에 대한 또 다른 해결책은 테스트 클래스에 @ComponentScan()을 추가하여 지정된 bean의로드를 건너 뜁니다.

@SpringBootTest 
@RunWith(SpringRunner.class) 
@ComponentScan(basePackages="com.pechen.demo", [email protected](type=FilterType.ASSIGNABLE_TYPE, classes=JmsListener.class)) 
public class MyTest(){ 

} 

더 이상 spring component scan include and exclude filters을 참조하십시오.

관련 문제