2016-06-20 7 views
0

Ich habe von Code folgendes Stück der IP-AdresseHttpcontext Null durch Unit-Tests

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; 


     } 

nun zu bewerten, wenn ich Unit-Tests für diese Methode zu implementieren versuchte, wirft es immer Fehler, null Referenz,

ich konnte nicht das eigentliche Verfahren nur Tests für Einheit ändern, gibt es eine Möglichkeit, dies zu handhaben ...

Dank

+0

Sie können einen Blick auf diese [Frage] (http://stackoverflow.com/questions/4379450/mock-httpcontext-current-in-test-init-methode), die zeigt, wie man ** einen httpContext ** vortäuscht. Ich denke, das wäre eine gute Lösung in Ihrer Situation! –

Antwort

1

das erwartet wird, weil Httpcontext keine ist vailable in Unit Tests und Unit Tests laufen in ihrem eigenen Kontext. Sie müssen eine Möglichkeit haben, HttpContext für Ihre Komponententests nachzuahmen/bereitzustellen.

+0

Wenn ich nicht vermisse, dann braucht es Änderungen in der tatsächlichen Methode, die ich nicht will –

1

Wenn Sie "HttpContext.Current.Request.UserHostAddress" nicht direkt verwenden würden, sondern stattdessen eine Wrapperklasse oder eine andere mockfähige Klasse, könnten Sie das Verhalten überspielen.

Here is an Example

sollten Sie wahrscheinlich System.Net.Dns.GetHostAddresses(strHostName).GetValue(0) verspotten und auch Ihren Test-unabhängig von dieser Klasse zu bekommen.

0

wenn Sie wollen Httpcontext verspotten, während Unit-Tests Sie typemock wie im folgenden Beispiel in Bezug auf Sie Methode verwenden können:

[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); 
}