如何为wcf客户端运行System.Net.Dns.GetAddrInfo?

时间:2012-02-12 08:53:51

标签: moles

我能够鼹鼠WebRequest.CreateUri,以便我可以用另一个替换请求的主机名。但是,我想Mole Dns.GetAddrInfo,以便我可以保持主机名相同,但是使主机名解析为另一个IP地址。

通过这种方式,我不必编辑我的hosts文件,例如,这是一种不太灵活的方法。

有什么建议吗?

谢谢。

修改
我已经将问题Visual Studio 2010 sln上传到问题here

打开sln时,

  1. 单击服务项目属性“Web选项卡”中的“创建虚拟目录”按钮。
  2. 重建解决方案
  3. 将以下条目添加到c:\windows\system32\drivers\etc\hosts
    127.0.0.1 www.productionserver.com
  4. TestMethod1项目中运行Tests单元测试 单元测试应该会成功。
  5. hosts文件中删除条目,然后重新运行单元测试 它应该失败。
  6. 我已经使用反编译器查看了System.ServiceModel.ClientBase<TChannel>的实现,并注意到它最终调用System.Net.Dns.GetAddrInfo将主机名解析为IP地址。

    我希望这个sln很简单,可以更新并发回(或只是评论需要做什么和/或改变),这样我就能看到解决问题所需的内容。

    谢谢。

    编辑2
    Moles目前似乎无法做到这一点。

1 个答案:

答案 0 :(得分:2)

System.Net堆栈通常不能用于支持,因为他的大部分功能都不受托管代码的控制。

而是在生产代码中创建一个接口和存根。使用具有依赖项注入的接口,将存根传递给目标代码。在测试期间,此存根只是调用您希望拦截的System.Net方法。

Moles将从界面自动生成Stub类型。只需实例化存根类型,绕过存根所需的方法/属性/事件,然后将Stub类型传递给正在测试的方法。

在无法创建Mole类型的任何地方使用存根和依赖注入。