单元测试带有Dns.GetHostEntry(hostNameOrIp)依赖的代码

本文关键字:依赖 代码 hostNameOrIp Dns GetHostEntry 单元测试 | 更新日期: 2023-09-27 18:03:19

我有使用Dns.GetHostEntry(hostNameOrIp)的代码,我想检查一次此函数返回实值在某些时间(当我决定时)此函数抛出异常的场景。
目前我在visual studio 2010中使用MSTest框架。有人知道最简单的方法是什么吗?

单元测试带有Dns.GetHostEntry(hostNameOrIp)依赖的代码

实现它的最简单方法是为这个静态方法创建包装器:

public class DnsWrapper : IDnsWrapper
{
    public IPHostEntry GetHostEntry(string hostNameOrAddress)
    {
         Dns.GetHostEntry(hostNameOrAddress);
    }
}

让你的代码依赖于这个接口:

public interface IDnsWrapper
{
   IPHostEntry GetHostEntry(string hostNameOrAddress);
}

现在,任何模拟库都可以很容易地模拟这个依赖项。例如Moq:

Mock<IDnsWrapper> dnsMock = new Mock<IDnsWrapper>();
dnsMock.Setup(d => d.GetHostEntry(It.IsAny<string>()))
       .Throws(new SocketException());
var yourClass = new YourClass(dnsMock.Object); // inject interface implementation
yourClass.DoSomethingWhichGetHostsEntry();