2015-03-19 5 views
2

Я использую инфраструктуру тестирования Nunit Unit и Moq для издевательства над объектом в моем веб-приложении MVC. У меня есть «HttpContext.Current.ApplicationInstance.Response» в моем действии при тестировании этого действия, которое содержит этот код возвращает ошибку, я дразнил HttpContext уже, но я не имею понятия о насмешливый applicationInstance.Response, пожалуйста, помогите мне, ребятаMocking HttpContext.Current.ApplicationInstance.Response

public static Mock<HttpContextBase> HttpMock { get; set; } 

    public void HttpContextMocking(string requesturl) 
    {HttpMock = new Mock<HttpContextBase>(); 
     var fakeIdentity = new GenericIdentity("[email protected]l.com"); 
     var principal = new GenericPrincipal(fakeIdentity, null); 
     HttpMock.Setup(x => x.User).Returns(principal); 
     HttpContext.Current = new HttpContext(new HttpRequest("", requesturl, ""), new HttpResponse(null)); 
     HttpContext.Current.User = principal; 

     //Mocking the Httpcontext User Identity 
     HttpMock.SetupGet(c => c.User.Identity.Name).Returns("[email protected]");} 

подвожу ошибка в NUnit Применение в качестве объекта Null эталонным execption, в этом коде в моем источнике генерирует исключение при тестировании блока отладки

«Ответ в этом контексте недоступен». HttpContext.Current.ApplicationInstance.Response = 'HttpContext.Current.ApplicationInstance.Response' бросил исключение типа 'System.Web.HttpException'

+0

Что это ошибка, вы получаете? – VictorySaber

+0

HI @VictorySaber Я обновил ошибку в моем вопросе. –

+0

Ваш лучший вариант - реорганизовать ваш код, чтобы контекст (или даже небольшая часть информации, которую вам нужно с него) был параметром, а затем передал его из чего-то, что вы не тестировали. (Вы все еще можете интегрировать тест.) Это позволит вам пройти в заглушку во время модульного тестирования. В лучшем случае ваш единичный тест сводится к простому тесту ввода/вывода. – jpmc26

ответ

0

Попробуйте макет ответ:

var response1 = new Mock<HttpResponseBase>(); 
response1.Setup(p => p.Write(A<string>.Ignored)).Callback((string s) => sb.Append(s)); 
+0

Существуют два разных, несвязанных типа 'Response'. [Тот, который используется «HttpContext.Current'» (https://msdn.microsoft.com/en-us/library/system.web.httpresponse%28v=vs.110%29.aspx) запечатан и не наследуется из 'HttpResponseBase'. Таким образом, это не будет работать для использования ОП. – jpmc26