2011-05-25 146 views
0

如何模擬(用於單元測試)丟失網絡連接或在其他地方重定向請求?模擬測試中的連接丟失

我有一些硬編碼不會忽略在類的定義:(我想測試腳本的行爲,其中地址,例如,不可達。

我可以修改etc/hosts文件(我是WIN7),但我想在測試套件執行期間多次關閉/修改連接,另外,在每次測試之前和之後進行測試並不實際,因此,我需要在windows上設置一個代理服務器,接受來自運行腳本的命令(以開啓/關閉重定向)並且能夠基於被調用的url具有重定向規則。

聽起來像可能的插件到Fiddler,但我沒有找到任何:(

+0

你正在測試哪部分程序?你能嘲笑網絡層還是你真的在測試網絡層? – Rup 2011-05-25 12:52:35

+0

我只需要模擬網絡層的一部分 - 斷開的連接。我有很多使用第三方api的東西,所以嘲笑每個請求,每個wsdl文件等都是我想避免的。 – 2011-05-25 12:58:15

回答

1

問題是這裏有很多事情要做。你基本上是想改變DNS設置,而應用程序正在運行...

需要自定義DNS服務器 設置Windows看看DNS服務器

在測試你已經登錄到DNS服務器,將名稱解析更改爲非工作IP,並在Windows中刷新DNS(ipconfig/flushdns)。

要麼,或者你能不能只實現一個防火牆阻止某個地址的連接?

+0

問題是,如何從運行內部命令防火牆腳本; – 2011-05-25 14:24:50

+0

你可以使用exec(netsh.exe防火牆設置allowedprogram C:\ php.exe)或者你的二進制文件在哪裏? – 2011-05-25 15:01:57

+0

希望它有助於:) – 2011-05-25 15:07:49

1

你想爲此http://en.wikipedia.org/wiki/Mock_object。現在取決於您的應用程序的結構,看是否可以實際使用的somethting這樣:)


編輯: 如果你真的不能使用模仿對象,嘗試再次使用它們:)如果你仍然不能,我在過去的某個時間點使用此(bat腳本)來測試連接斷開時程序的反應。我使用ping來模擬sleepdevcon來控制網絡設置。它不包括您的所有需求,但它可能會給出一個起點

:loop 
    devcon disable *VEN_1969* 
    ping -n 5 localhost 
    devcon restart *VEN_1969* 
    ping -n 5 localhost 
    devcon enable *VEN_1969* 
    ping -n 5 localhost 
# rem goto loop 
+0

其實我不行。我想測試的所有連接事件和代碼處理連接錯誤都在一個類中,我不能嘲笑它。 – 2011-05-25 13:03:29

+0

@ts:看到編輯,希望它幫助 – Quamis 2011-05-25 13:27:55

+0

實際上,它給了我一個想法(使用通過exec調用的bat腳本來切換網絡連接) - 我會嘗試這種方法 – 2011-05-25 14:27:30