簡體   English   中英

在JUnit中測試REQUIRES_NEW

[英]Testing REQUIRES_NEW in JUnit

運行我的測試時,它掛在對method()的調用上。 難道我做錯了什么? 救命!

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"beans.xml"})
@Transactional(rollbackFor = Exception.class)
public class Test {
    @Test
    public void test() {
        itemUnderTestDao.method();
        // ...
    }
}

public class ItemUnderTestDao {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void method() {
        // ...
    }
}

忘記上面的代碼。 現在,我已經在http://www44.zippyshare.com/v/46865082/file.html上載了一個Eclipse項目(不包括像spring這樣的依賴項)。 非常感謝您提供有關如何通過測試的所有輸入! 如果我有兩個sqlite數據庫和兩個dataSources,則測試通過。

正如mrembisz所說,您試圖同時在2個線程中獲得2個連接。

  1. 對於測試本身,在測試期間將一直存在
  2. 對於方法調用,在調用期間將一直存在。

我在稍微不同的情況下遇到了同一件事。

您可以通過2種方式解決此問題:

  1. 將傳播更改為REQUIRED ,這樣您就可以重用測試最初獲得的Connection。
  2. 增加池的大小,但請記住,您需要考慮同時更新的最大數量,大致為maxThreadPoolSize >= (maxSimultaniousUpdates + 1) + (min size for other activities) (如果您在列表1待處理的連接中,則最終所有待處理的連接操作即可完成)。 否則,這將重新出現在生產中。

對我來說,第一個解決方案似乎更好,當然,如果它不損害您的邏輯:)

您正在嘗試打開與數據庫的第二個連接。 由於@Transactional為類Test打開了第一個,因此method()上的REQUIRES_NEW強制另一個連接。

您的連接池可能僅允許一個並發連接。 檢查其大小和數據庫配置。

還要遍歷您的問題並將選定的答案標記為已接受(答案主體旁邊的復選標記形狀)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM