单元测试带有Dns.GetHostEntry(hostNameOrIp)依赖的代码
本文关键字:依赖 代码 hostNameOrIp Dns GetHostEntry 单元测试 | 更新日期: 2023-09-27 18:03:19
我有使用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();