2016-06-20 7 views
0

я следующий кусок кода, чтобы оценить IP-адресHttpContext Null через модульное тестирование

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

Вы можете посмотреть на этот вопрос [] (http://stackoverflow.com/questions/4379450/mock-httpcontext-current-in-test-init-method), который показывает, как ** издеваться над httpContext **. Я думаю, что это будет хорошим решением в вашей ситуации! –

ответ

1

это, как ожидается, потому что HttpContext не vailable в модульных тестах и ​​модульных тестах выполняются в их собственном контексте. Вам нужно будет иметь возможность высмеять/предоставить HttpContext для ваших модульных тестов.

+0

Если мне не хватает, то мне нужны изменения в фактическом методе, который я не хочу –

1

Если вы не использовали бы «HttpContext.Current.Request.UserHostAddress» напрямую, но вместо этого вместо класса wrapperclass или другого макетируемого класса вы могли бы высмеять поведение.

Here is an Example

вы должны, вероятно, глумиться System.Net.Dns.GetHostAddresses(strHostName).GetValue(0), а также, чтобы получить испытания независимо от этого класса тоже.

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); 
} 
Смежные вопросы