我有以下代码来评估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;
}
现在,当我尝试实现此方法的单元测试时,它总是会引发错误,null引用,
我无法仅仅更改用于单元测试的实际方法,是否有任何方法可以处理此问题...
谢谢
这是可以预期的,因为在单位测试和单元测试中,在自己的上下文中不可用。您将需要一种方法来模拟/提供单位测试的httpcontext。
如果您不使用" httpcontext.current.requrest.userhostaddress"直接 - 但是通过包装纸或其他可模拟类,则可以模拟行为。
这是一个示例
您也应该模拟System.Net.Dns.GetHostAddresses(strHostName).GetValue(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);
}