我有一個程序,可以將工作項目從阻塞隊列中取出,並同時對它們進行處理。我意識到這是一個非常鬆散的描述,但任何人都可以提出一個單元測試策略/想要測試什麼?Java - 併發/阻塞隊列單元測試策略
5
A
回答
2
在java.util.concurrent中使用工作隊列機制並依賴它們來測試它們的代碼。然後,測試你的工作人員,確保它做到了正確的事情。如果它獨立於其他應該足夠的線程。否則,您可能需要在符合您的生產環境的hardware/os/jvm配置上提出集成測試策略。
2
您需要設計它進行測試。
所以具體的建議:
- 確保您可以將測試類或嘲笑到隊列
- 代碼的一些早期的模擬,需要更長的時間,並確保他們是不是完成了第一批(演示併發性)
- 確保您的結果集大小與所有測試相同。
- 確保您的結果在分配給最長測試的時間後才完成。
嗯,這一切都源於能夠將嘲笑/測試類注入到隊列中。
+0
謝謝,這些都是好主意。 – 2012-01-10 23:34:04
2
這種類型取決於您的課程進行的處理類型,以及取消的項目。例如,假設他們將項目寫入數據庫。你可能想要這樣的測試。
- 單線程可以從隊列中拉出一個項目並將其保存到數據庫中。
- 兩個線程可以同時從隊列中取出項目,並且如果第一個線程先嚐試保存,則會保存數據。
- 兩個線程可以同時從隊列中取出項目,並且如果第二個線程先嚐試保存,則會保存數據。
- 五十個線程(或任何限制適用於您的程序)可以同時從隊列中拉出項目,並正確保存數據。
如果您正在使用某個JDK阻塞隊列實現或來自第三方的實現,請確保您不要嘗試測試阻塞隊列類本身的行爲。當然,如果你編寫了自己的代碼,那麼你需要編寫更多的測試。
希望這會有所幫助。
+0
謝謝,這些都很棒。 – 2012-01-10 23:35:15
相關問題
- 1. 測試非阻塞隊列
- 2. Java中的併發和阻塞隊列
- 3. 併發問題 - 阻塞隊列
- 4. Java中的阻塞隊列
- 5. Java,被阻塞的隊列
- 6. 阻塞'take()'的隊列實現,但帶有驅逐策略
- 7. 單進程阻塞隊列
- 8. 非阻塞隊列
- 9. Vertx單元測試阻塞主線程
- 10. LinkedTransferQueue是阻塞隊列還是非阻塞隊列?
- 11. 阻塞隊列Ç
- 12. 阻塞隊列不阻塞線程?
- 13. 單元測試策略,NHibernate的庫
- 14. Java EE測試策略
- 15. 單元測試非阻塞方法(異步測試)
- 16. 非阻塞Jms隊列發件人
- 17. 阻塞隊列實現
- 18. 隊列阻塞主線程
- 19. 阻塞隊列和InterruptedException
- 20. 阻塞隊列設計
- 21. REST和阻塞隊列
- 22. GCD - dispatch_async上阻塞隊列
- 23. EJB測試策略?
- 24. 僅包含唯一元素的Java阻塞隊列
- 25. 併發包中的阻塞隊列方法;
- 26. 如何創建我們可以阻塞的Java併發隊列 - 在單個調用中使用多個元素?
- 27. ActivePivot測試策略
- 28. nhibernate測試策略
- 29. 是否在同步GCD隊列上放置一個阻止阻塞並暫停其他阻塞的阻塞?
- 30. 2人團隊的簡單開發/測試/生產環境策略
你想要測試什麼,BlockingQueue或併發處理對返回值的有效性? – 2012-01-10 23:11:02
我已經測試了阻塞隊列處理程序工作的實際工作的有效性,但我想測試圍繞它的操作的代碼。 – 2012-01-10 23:32:58
對併發的測試非常棘手:您可以擁有一個非常糟糕的多線程程序,它可以在某些平臺(例如單核CPU)上完美地通過所有測試,但在其他平臺上失敗。即使您的測試在多核CPU上成功,線程調度也會因不同的操作系統而有所不同,並且可能會在別處失敗。 – toto2 2012-01-11 00:24:25