我有以下代码来评估IP地址
public string getIPAddress()
{
string IPAddress = string.Empty;
String strHostName = HttpContext.Current.Request.UserHostAddress.ToString();
IPAddress = System.Net.Dns.GetHostAddresses(strHostName).GetValue(0).ToString();
return IPAddress;
}
现在,当我尝试为此方法实现单元测试时,它总是抛出错误,空引用,
我无法改变单元测试的实际方法,有没有办法处理这个......
由于
答案 0 :(得分:1)
这是预期的,因为HttpContext在单元测试中不可用,并且单元测试在它们自己的上下文中运行。您需要有一种方法来模拟/提供HttpContext到您的单元测试。
答案 1 :(得分:1)
如果您不使用" HttpContext.Current.Request.UserHostAddress"直接 - 但是通过包装类或其他可模拟的类,你可以模拟行为。
你也应该模仿System.Net.Dns.GetHostAddresses(strHostName).GetValue(0)
,让你的测试也独立于这个类。
答案 2 :(得分:0)
如果你想在单元测试时模拟HTTPContext,你可以使用typemock,如下面关于你方法的例子所示:
[TestMethod,Isolated]
public void TestForHttpContext_willReturn123AsIP()
{
// Arrange
Program classUnderTest = new Program();
IPAddress[] a = { new IPAddress(long.Parse("123")), new IPAddress(long.Parse("456")), new IPAddress(long.Parse("789")) };
Isolate.WhenCalled(() => HttpContext.Current.Request.UserHostAddress).WillReturn("testIP");
Isolate.WhenCalled(() => Dns.GetHostAddresses(" ")).WillReturn(a);
// Act
var res = classUnderTest.getIPAddress();
// Assert
Assert.AreEqual("123.0.0.0", res);
}