2012-06-12 66 views
1

我可以在沒有文件系統和網絡訪問的情況下創建junit環境嗎?我想對我們的測試用例執行更嚴格的規則。沒有網絡和文件訪問的JUnit測試沙箱?

理想情況下,這可以使用maven和默認測試階段的工作進行配置。

回答

1

根據這個答案https://stackoverflow.com/a/309427/116509,我想你可以在測試設置上設置一個SecurityManager,並在拆卸時恢復原來的狀態。

但是,恕我直言,一些單元測試應該允許觸及文件系統,例如,如果被測試的類實際上創建文件作爲其合同的一部分。 (您可以使用依賴注入來確保文件在臨時目錄中創建)。同樣,使用HTTP的類的單元測試應該針對HTTP端點進行測試。否則,你最終會嘲笑一切,你的測試變得毫無價值。我想默認應該是拒絕訪問,然後開發人員需要專門覆蓋這種測試的權限。

+0

這工作(至少從我的junit測試日食)。我目前試圖找出爲什麼它不適用於maven。一旦我成功,我會更新帖子。 – Jan

0

在文件系統/網絡訪問中處理這些依賴關係的典型方法是在測試環境中將它們模擬出來。這樣,真正的代碼可以通過正常的渠道,但您的測試不必依靠文件系統或網絡。

研究嘲笑框架,以幫助你做很多事情。啓用這種測試也將使您的代碼更清潔。 :)

+0

我這樣做我的類/接口。我想爲所有的comitters創建一個約束,所以沒有人偶然使用network或unix文件系統作爲依賴。 – Jan

0

您可以使用Ashcroft禁止從測試中訪問文件系統和其他資源。它使用Java安全管理器來限制對特定資源的訪問。

另一種方法是使用AspectJ並實現幾個禁止調用某些API或包的建議。

0

我不確定您的意思是JUnit環境,但您不需要文件系統或網絡訪問來運行單元測試。另一方面,如果您正在測試使用網絡和文件系統API的代碼,則可能有問題。在這種情況下,您可能需要將代碼抽象爲更小的可測試塊。你不應該測試天氣網絡和文件系統API在單元測試中工作,這些是集成測試。您應該只在單元測試中測試您的代碼。

+0

您重複了一般junt模式,但您如何執行它們? – Jan

+0

同行代碼審查對於執行這些類型的約束非常有用。只需將其作爲代碼審批清單的優先級即可。 – aglassman