2014-01-21 42 views
0

我們使用junit,jms(activemq)和mySql來使用spring。JUnit和jms--被觸發的事件在測試中不會被消耗

我們想創建一些junit測試,在執行db之後會回滾。

爲了實現我們對每個測試使用@Transactional註釋。

問題是,我們的一個測試是調用一個發送jms消息的服務,(在測試過程中)事件是測試結束後纔會消耗事件(交易結束可能?) 這就是爲什麼在測試結束時斷言失敗。

爲什麼事件沒有被消耗馬上任何想法(PS,我們試圖用睡眠,以便讓事件被消耗掉,它不工作)

回答

0

首先,這不是一個單元測試...沒關係......有兩個原因消息未被消耗:

  1. 消息發送的事務沒有被提交。由於這個原因,服務器端消息的鎖定不會被釋放。
  2. 有一個時間問題,測試結束得太快,不會等待回調。
0

這就是交易的要點。該消息在事務提交之前不可用於消費(否則,如果某人已經看到它,該如何將其還原)?如果您不希望發送是包含事務的一部分,您可以在新事務(Propagation.REQUIRES_NEW)中進行發送。