2017-03-15 8 views
0

다음과 같은 테스트를 작성하고 싶습니다.jms listener에서 수신 된 메시지를 확인하기위한 테스트 작성 (Spring-Boot)

  1. src/mainstate-info-1라는 청취자가있다.

  2. 메시지가 변경되면 activemq 주제 state-info-2에 새 메시지가 게시됩니다.

  3. 더미 메시지를 작성하고 activemq 주제 state-info-1에 게시합니다.

  4. 마지막으로 토픽 state-info-2에 대한 수신 메시지가 예상과 일치하는지 확인합니다.

내 수신기는 다음과 같습니다.

@JmsListener(destination = "state-info-1", containerFactory = "connFactory") 
public void receiveMessage(Message payload) { 
    // Do Stuff and Publish to state-info-2 
} 

테스트를 작성할 수 있습니까? 아니면 다른 방법으로해야합니까?

또한, 나는이 바라 보았다 : https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-activemq/src/test/java/sample/activemq/SampleActiveMqTests.java

그러나 이것은 내가 기대하고 무엇을하지 않습니다.

올바른 방향으로 도움말이나 밀기 만하면 충분합니다.

감사합니다.

답변

3
@SpringBootApplication 
public class So42803627Application { 

    public static void main(String[] args) { 
     SpringApplication.run(So42803627Application.class, args); 
    } 

    @Autowired 
    private JmsTemplate jmsTemplate; 

    @JmsListener(destination = "foo") 
    public void handle(String in) { 
     this.jmsTemplate.convertAndSend("bar", in.toUpperCase()); 
    } 

} 

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class So42803627ApplicationTests { 

    @Autowired 
    private JmsTemplate jmsTemplate; 

    @Test 
    public void test() { 
     this.jmsTemplate.convertAndSend("foo", "Hello, world!"); 
     this.jmsTemplate.setReceiveTimeout(10_000); 
     assertThat(this.jmsTemplate.receiveAndConvert("bar")).isEqualTo("HELLO, WORLD!"); 
    } 

} 
+0

감사합니다. 이것은'Queues'에서 작동하지만, 내가 사용하는 activemq'Topics'에서는 작동하지 않습니다. 'spring.jms.pub-sub-domain = true' 속성을 가지고있을 때 작동하지 않습니다. 'null'을 얻습니다. – Raj

+2

JMS 토픽이 작동하는 방식 일뿐입니다. 기본적으로 구독은 내구성이 없으며 메시지가 게시 될 때 활성화 된 소비자 만 메시지를받습니다. 전송하기 전에 청취자가 구독 할 때까지 기다리거나 구독을 영구적으로 유지해야합니다. 즉, 처음 테스트를 실행할 때만 기다려야합니다. –

+0

그것을 얻었습니다! 기다려서 제대로 작동합니다. 다시 한번 감사드립니다 :) – Raj