一般問題是如何模擬(作爲JUnit
測試用例套件的一部分)缺乏網絡連接性,因爲在某些測試用例中這是一個重要的考慮因素。有沒有辦法通過Java API(或通過JVM選項)這樣做,以便某些測試用例可以在網絡分離連接下運行? (模擬還是真實?)。如何模擬單元測試中缺乏網絡連接性
更具體的案例(如果沒有普遍適用的解決方案)是我正在做一堆XML文件處理(包括XSD驗證),並且我需要確保沒有任何內容通過網絡獲取,具體來說,沒有使用xsi:schemaLocation
屬性值(提示),並且所有XSD實際上都是從類路徑中獲取的。我使用的Validator自定義LSResourceResolver加載可能需要從類路徑中的任何XSD。
我想我可以實現LSResourceResolver
的resolveResource
方法,以永不返回null
(因此,這樣才能永遠依傍打開一個普通的URI連接到資源的默認行爲),但我不知道無論這樣做是否足夠,並且無論如何,如果我可以在模擬孤島模式下運行我的JUnit
測試(無需手動降低我的機器上的接口),我會感覺更有信心。
UPDATE
接受的答案,即所提供的-DsocksProxyHost
做法正是我所需要的JUnit task可以接受VM參數(如果fork
設置爲true
)和解決方案,所以我可以在我的螞蟻以下文件:
<junit printsummary="true" showoutput="true" fork="true" maxmemory="256m">
<jvmarg value="-DsocksProxyHost=127.0.0.1"/>
...
...包裹在裏面contrib:if
這樣我就可以在命令行是否將網絡連接或沒有的條件下運行JUnit測試控制。
的作者,如果你會使用一個JVM選項,這會是一個集成測試。爲了進行適當的單元測試,您的網絡連接將成爲您可以模擬的孤立依賴項。這聽起來像你有一個很難依賴Java網絡apis。 – eis 2015-02-08 17:31:05
取決於你的代碼是怎麼回事,但我會嘲笑套接字()調用(請參閱http://stackoverflow.com/questions/3202675/mocking-sockets-in-java-with-mockito討論)或運行在單獨的虛擬機中進行測試(如果這不合適) - 例如,如果您正在使用完全獨立的微服務,這種微服務不會被測試中的代碼嘲笑 – Vorsprung 2015-02-08 17:52:58