如何在C#中的单元/集成测试中模拟“无Internet连接”

时间:2016-08-03 19:07:41

标签: c# unit-testing networking

我有一个(部分)使用互联网连接的组件。我写了一些UnitTests来确保组件正常工作。但是,我想测试没有互联网连接的组件的行为。

所以,我的目标是以某种方式临时禁用互联网或整个互联网连接,并在测试后重新激活。

3 个答案:

答案 0 :(得分:3)

我会在测试初始化​​中禁用\ enable like here local连接

[ClassInitialize]
SelectQuery wmiQuery = new SelectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");
ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher(wmiQuery);
foreach (ManagementObject item in searchProcedure.Get())
{
    if (((string)item["NetConnectionId"]) == "Local Network Connection")
    {
       item.InvokeMethod("Disable", null);
    }
}

 [ClassCleanup()]
 // Enable local area connetcion

答案 1 :(得分:2)

虽然不是您问题的直接答案,但我相信您可能会在此工具中找到一些用途 - https://jagt.github.io/clumsy/download

我已经在工作中使用它来模拟我目前正在处理的移动应用的不同网络条件。通过将数据包丢弃设置为100%,可以完全禁用网络连接。

答案 2 :(得分:1)

系统有很多方法可以拥有“无互联网”,答案实际上取决于你的意思。

正如accepted other answer建议的那样,您可以简单地禁用网络接口。这保证你没有互联网,但计算机也会知道它也没有网络。

其他几个选项

  1. 删除默认网关(这可能需要在控制面板中设置静态IP设置,但I'm sure you could do it programmatically as well
  2. 这样,计算机仍然可以连接它,但除了在本地子网上之外它不会有任何网络访问

    1. 删除DNS服务器设置,请参阅上面的链接。
    2. 这样,计算机具有基于IP的直接访问权限,但对于普通用户而言,它看起来好像存在“没有互联网”。