问题描述
|
如何模拟(出于单元测试的目的)网络连接丢失或将请求重定向到其他任何地方?
我在类定义中有一些硬编码的地址:(并且我想测试例如地址不可达的脚本的行为。
我可以修改etc / hosts(我在win7上),但是我想在执行测试套件的过程中多次停用/修改连接。另外,在每次测试之前和之后修改它都是不切实际的。
因此,我需要在Windows上为PHP设置一个代理,该代理能够接受来自运行脚本的命令(以打开/关闭重定向),并能够基于称为url的重定向规则。
听起来像是fiddler的可能插件,但我没有找到任何:(
解决方法
问题是这里发生了很多事情。您基本上是想在应用运行时更改DNS设置...
您需要自定义DNS服务器
将Windows设置为查看DNS服务器
测试时,您必须登录到DNS服务器,将名称解析更改为不起作用的IP,然后在Windows中刷新dns(ipconfig / flushdns)。
要么,或者您是否不能仅仅实现阻止某个地址的连接的防火墙?
,您需要此http://en.wikipedia.org/wiki/Mock_object。现在,取决于您的应用程序的结构来确定您是否可以实际使用类似的东西:)
编辑:
如果您真的不能使用模拟对象,请尝试再次使用它们:)如果您仍然不能使用,我在过去的某个时候使用了这个(bat脚本)来测试连接断开时程序的反应。我使用ping来模拟
sleep
和devcon
以控制网络设置。它不能满足您的所有需求,但可以作为一个起点
: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