我有一个 C# 模块负责获取 Windows Vista 机器上“连接到互联网”的网络适配器列表。该模块使用“网络列表管理器 API ”(或 NLM API)遍历所有网络连接并返回所有 IsConnectedToInternet 值为 true 的连接。
我收到了一些关于在这个SO question中实施这个模块的建议
为了测试这个模块,我决定编写一个帮助程序,它基于另一个逻辑返回互联网连接的接口列表,因此这将是对原始模块逻辑的一种“现实检查”。请注意,对于测试助手,我愿意使用可能被认为对生产代码不利的检测方法(例如,依赖一些可用的互联网资源,如“Google”——以防它关闭、被我们的内部防火墙阻止等)。与部署的产品库相比,修复测试相对容易)。
我选择的另一种检测方法是尝试使用 TcpClient 连接到“www.google.com:80”。我的问题:当我有多个连接的适配器(例如无线和 LAN)时,其中一个的检测方法失败,并出现错误“在已连接的套接字上发出连接请求”。
我的问题是三个方面:
一般来说,您将如何测试这样的模块?您是否支持以不同的方式做同样的事情并比较结果的想法,或者这是一种矫枉过正的做法,我应该依赖系统的 API?我在这里的主要问题是,很难预先配置系统,以便我提前知道预期的结果。
你会建议什么替代逻辑?上述问题中建议的一件事是查看路由表 - 是否将每个具有目的地为 0.0.0.0 的路由条目的适配器视为“已连接到 Internet”?其他建议?
你明白为什么我在当前的测试逻辑中得到“已经连接”的错误吗?