容器內測試通常與使用模擬對象進行測試相反。但是,由於模擬對象只是模仿真實對象的行爲,因此容器內測試不是真正在真實環境中測試系統的唯一方法嗎?容器內測試與模擬對象進行集成測試
作爲容器內部測試和模擬對象的部分替代方案,Spring提供了TestContext
框架,它可以很好地初始化Spring,而無需啓動實際的應用程序容器(在我的情況下爲Web應用程序服務器)。然而,這是有限的方法,因爲它只初始化Spring特有的功能,而不支持應用程序服務器特定的功能。所以你不能測試一切。另外,因爲它與用於真正web執行的默認WebApplicationContext
不是100%相同,所以這種方法有點不合理嗎?它不好嗎?
對於容器內測試,至少有Cactus(過時),Jeeunit(一個非常小的項目)和JBoss Arquillian(仍然是α,但看起來很有希望)。我沒有看到任何這些項目被廣泛使用,那麼容器內測試有什麼不好的地方?容器內測試經常提到的主要缺點是執行速度慢。但是,當在持續集成環境中運行並且在相對較小的項目中運行時,這應該不成問題。
總結:我們應該進行容器內外測試還是爲什麼?使用模擬對象或替代初始化機制(如在Spring TestContext中)來進行集成測試會感覺不好嗎?
附註:我最近問了一下categorization of integration test,這可能是相關的。
我非常好地運行了容器外的單元測試。其實,我不明白你爲什麼要運行「幾個小容器內單元測試」來測試「彈簧佈線」和東西?也許你在那裏弄錯了,你的意思是「一對小容器內集成測試*」嗎?另外,我的理解是否正確:如果對運行時配置進行更改,則必須將該設置複製到集成測試項目中?您如何實際運行/初始化容器內測試?在某種框架的幫助下可能? – 2010-07-14 13:13:59
我編輯了該部分。我的意思是我們在我們的單元測試集合中進行了幾次集成測試,以確保所有的Spring接線都能正常工作。所有配置文件都帶有代碼 - 我們不會將任何配置複製到集成項目中。集成項目與生產代碼共享相同的包路徑,因此可以加載所有相同的src/main/resource(我們使用mvn)configs。 – Gray 2010-07-14 13:33:00