单元使用Dns.GetHostEntry(hostNameOrIp)依赖项测试代码

时间:2014-05-13 12:28:29

标签: c# unit-testing dependencies

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

1 个答案:

答案 0 :(得分:7)

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

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();