我想知道是否有一些能夠輕鬆編寫多線程測試的單元測試框架?如何編寫多線程單元測試?
我想像這樣: 通過n個線程同時調用m次特殊的測試方法。在所有測試線程完成之後,將會調用應該驗證一些約束的斷言方法。
我目前的做法是在junit測試方法中創建Thread對象,手動循環每個run()方法中的真實測試用例,等待所有線程,然後驗證斷言。但是使用這個,我爲每個測試都有一個大的樣板代碼塊。
你有什麼經驗?
我想知道是否有一些能夠輕鬆編寫多線程測試的單元測試框架?如何編寫多線程單元測試?
我想像這樣: 通過n個線程同時調用m次特殊的測試方法。在所有測試線程完成之後,將會調用應該驗證一些約束的斷言方法。
我目前的做法是在junit測試方法中創建Thread對象,手動循環每個run()方法中的真實測試用例,等待所有線程,然後驗證斷言。但是使用這個,我爲每個測試都有一個大的樣板代碼塊。
你有什麼經驗?
有,還有GroboUtils。
很多年前我已經使用了GroboUtils,並且完成了這項工作。 ConTest更新,並且現在是我的首選起點,因爲它不僅僅依靠試驗和錯誤,儀器強制執行特定的線程交叉,提供確定性測試。相比之下,GroboUtils MultiThreadedTestRunner只是簡單地運行測試,並希望調度程序產生交錯,導致線程錯誤出現。
編輯:另見ConcuTest這也強制交錯和自由。
ConTest看起來不錯,但似乎不是免費提供(我只能找到一個試用版)。 – MRalwasser 2010-07-15 14:16:10
還有ConcuTest,我已添加爲編輯。 – mdma 2010-07-15 15:59:34
FindBugs fame的Bill Pugh還有MultithreadedTC。
+1:我以前使用過它,並且發現它非常適合生成特定的交織和斷言您實現的屬性。 – 2010-07-16 10:42:33
只使用併發庫會簡化你的代碼。你可以把你的鍋爐代碼轉換成一種方法。
喜歡的東西
public static void runAll(int times, Runnable... tests) {
}
這不回答這個問題。是的,代碼會更簡單,並且可以消除一些風險,但仍然應該以某種方式進行測試。 – 2010-07-19 08:25:43
我問了一個有關(不重複)的問題了一段時間回來,並得到了人們的一些很好的答案: http://stackoverflow.com/questions/537014/using-tdd -to-drive-out-thread-safe-code – 2010-07-15 13:56:39
另請參見https://stackoverflow.com/questions/12159/how-should-i-unit-test-threaded-code – Raedwald 2017-11-12 10:44:06