我有使用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();