這是一個有趣的應用程序。Junit使用數據庫訪問測試多線程應用程序
我有一個運行在tomcat下的servlet訪問應用程序。底層實現使用ThreadPoolExecutor來細分任務,此時只是一個電子郵件分銷商。我一直在添加JUnit測試,慢慢地將cobertura報告的代碼覆蓋率降至幾乎可接受的水平。 一些到位的JUnit測試背景:
- 在@BeforeClass我建立了數據庫連接查詢是在測試環境中有效的上下文。
- 在Servlet測試中,我使用HttpUnit獲取InvocationContext,然後是該servlet的一個實例。
- 然後,我調用servlet中執行所有工作的主要方法,並最終調用線程管理器以獲取適當的分發方法,並使用之前定義的ThreadPool。
- 問題出現在派生線程中。使用@BeforeClass中創建的上下文設置,servlet的數據庫訪問工作得很好。線程無權訪問該上下文,並且無法獲取數據庫連接信息,從而導致線程代碼失敗。
因此,底線,任何人都有一個想法如何測試線程代碼,這是想要數據庫訪問?甚至是一種全新的單元測試方法,可以與需要訪問數據庫的多線程應用程序一起使用。
任何其他細節可以提供給一個點。我希望我已經提供了足夠的信息,提供實際的代碼不是必需的。
爲了測試目的,您可以使用['MoreExecutors.sameThreadExecutor()']替換'ThreadPoolExecutor'(http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util /concurrent/MoreExecutors.html#sameThreadExecutor())?你也可以定義在線程中不可用的* context *嗎? –
如果你打的是數據庫,那就是集成測試,而不是單元測試 –
你真的需要連接到數據庫嗎? – imrichardcole