2017-03-15 3 views
0

私は以下のようなテストを書いています。jmsリスナーで受信したmsgを検証するためのテストを書く(Spring-Boot)

  1. src/mainstate-info-1と呼ばれるリスナーがあります。

  2. アクティブなトピックのメッセージ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

関連する問題