httpContext通过单元测试



我有以下代码来评估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);
}

相关内容

  • 没有找到相关文章

最新更新