私は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回のテストで挿入、更新、または削除が完了した後、テストが終了すると、データベースは元の状態にロールバックされますテストの前に、メッセージキューやトピックで同じことが起こりたいと思います。
これについての助力は素晴らしいことです。ありがとう!