2011-05-25 108 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