在J2EE Web應用程序中,人們如何管理資源以便它們對Web上下文和單元/集成測試都可見?單元測試和Web應用程序 - 資源
我發現通常你最終會在開發過程中以某種方式配置源/資源文件夾(即Maven期望的),所以你的單元測試將在你的IDE中運行。但是,一旦將Web應用程序構建並打包到WAR文件中(即,當您的Continuous Integration Server已完成構建時),由於資源位於其他位置,您的單元測試將不再運行。
您是否最終將資源保存在兩個不同的地方並手動保持同步?
在J2EE Web應用程序中,人們如何管理資源以便它們對Web上下文和單元/集成測試都可見?單元測試和Web應用程序 - 資源
我發現通常你最終會在開發過程中以某種方式配置源/資源文件夾(即Maven期望的),所以你的單元測試將在你的IDE中運行。但是,一旦將Web應用程序構建並打包到WAR文件中(即,當您的Continuous Integration Server已完成構建時),由於資源位於其他位置,您的單元測試將不再運行。
您是否最終將資源保存在兩個不同的地方並手動保持同步?
通常這是多模塊構建的原因。外部服務與Web應用程序分開構建。因此,在構建該模塊時,您可以構建,打包並運行集成測試。
另一個模塊可以包含您的域模型和它的單元測試,它們也在構建時運行。
模塊導致WAR根本沒有任何Java代碼,但只有與Web相關的工件是很常見的。儘管沒有必要,但通常這是因爲在戰爭模塊中的代碼不能被包含到另一個模塊中。
最後一個特例是包含Web測試的模塊。該模塊通常需要來自其他模塊的測試範圍工件(因爲它從外部測試應用程序,但可能需要從內部獲取數據)。這可以通過在jar文件中打包測試資源來解決,爲每個模塊創建一組單獨的「測試」jar文件。
多模塊構建是Maven項目的標準,也很容易爲其他構建系統(如ant)設置。
我不會在WAR文件中打包測試資源和測試,也不會從WAR運行單元測試。你爲什麼試圖這樣做?
我們嘗試在容器中使用單元測試,但幾年前放棄了它。對每個單元測試來說,更好(至少對我們來說)是一個單獨的類,而不是別的,嘲笑對其他類的依賴(參見JMock或許多競爭對手)。一個好的基本規則是,如果它觸及數據庫,網絡或文件系統,它不是一個單元測試。 (這可能對其他東西有用,但它不是一個單元測試,請參閱these unit testing rules瞭解更多信息。)
用這種方式編寫的單元測試可以在任何地方運行,並且它們非常快速(我們有數千在中等規格的硬件上在60秒內運行它們。)
您可能還想運行集成測試來檢查子系統或整個應用程序。我們發現子系統測試還可以在他們的邊界使用模擬 - 例如,我們僞造外部定價源 - 並且端對端測試可以使用像Selenium或WebDriver這樣的工具,它們可以讓您在服務器上部署整個應用程序然後像用戶一樣用瀏覽器打開它。
(順便說一句,我們的單元測試的方法,使我們mockists,而不是的古典,在Martin Fowler's taxonomy)
我離開了這個問題很開闊,但我想我在尋找更多特別是在更接近您的「網絡測試」描述的情況下。在這種情況下,這聽起來像是你在類路徑上提供資源(在一個單獨的jar中)。 – ayang 2009-01-16 14:46:45