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

最佳答案

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

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

10-05 22:38