2017-02-24 7 views
0

私はSpring 4.3.5.ReleaseとActiveMQ 5.14.3を使ってメッセージキューを処理しています。ここでSpring JMS統合ユニットテストはメッセージをキューに残します

は、アプリケーションのコンテキストファイルからの私の定義です:

<!-- Activemq connection factory --> 
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <!-- brokerURL, You may have different IP or port --> 
    <constructor-arg index="0" value="${message.broker.url}" /> 
</bean> 

<!-- Pooled Spring connection factory --> 
<bean id="jmsConnectionFactory" 
    class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <constructor-arg ref="amqConnectionFactory" /> 
</bean> 

<!-- ======================================================= --> 
<!-- JMS Send, define default destination and JmsTemplate --> 
<!-- ======================================================= --> 
<!-- Default Destination Queue Definition --> 
<bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue"> 
    <!-- name of the queue --> 
    <constructor-arg index="0" value="${default.message.queue}" /> 
</bean> 

<bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver"/> 

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="jmsConnectionFactory"/> 
    <property name="defaultDestination" ref="defaultDestination" /> 
    <property name="destinationResolver" ref="jmsDestinationResolver"/> 
    <property name="pubSubDomain" value="${pub.sub.domain}"/> 
    <property name="receiveTimeout" value="${receive.timeout}"/> 
</bean> 

そしてここでは、デフォルトのキューにメッセージを作成するためのコードです:ここで

public boolean sendResponse(final MyObjectDTO myObject) { 
    boolean success = false; 
    this.jmsTemplate.convertAndSend(ebvResponse); 
    success = true; 
    return success; 
} 

は私のユニットテストです:

このテストはうまく動作し、メッセージは正しくキューに入れられます。

単体テストがトランザクションであり、メッセージがキューからロールバックされるため、テストが終了してもメッセージはキューからロールバックされることが予想されますが、そうではありません。

これはActiveMQサーバーに実際に触れ、メッセージをキューに入れているため、これは「統合」テストであることが分かります。

これを実際にトランザクションにすることで、キューに入れたメッセージが本当にロールバックされるようにするには、手動でこのテストをロールバックする必要がありますか?

データベースで数百の「統合」単体テストを実行しました.1回のテストで挿入、更新、または削除が完了した後、テストが終了すると、データベースは元の状態にロールバックされますテストの前に、メッセージキューやトピックで同じことが起こりたいと思います。

これについての助力は素晴らしいことです。ありがとう!

答えて

0

JmsTemplatetruesessionTransactedを設定する必要があります。

ただし、テストメッセージは、コミットしない限り、どこからでも受け取ることができません。

関連する問題