Макет контроллера, который имеет свойство только для чтения, зависящее от Httpcontext - PullRequest
0 голосов
/ 19 мая 2018

Используя MOQ для макетирования контроллера ASP.Net MVC, я придерживаюсь этого подхода:

var fakeHttpContext = new Mock<HttpContextBase>();

fakeHttpContext.Setup(t => t.User).Returns(genericPrincipal);

var request = new Mock<HttpRequestBase>();

var controllerContext = new Mock<ControllerContext>();
controllerContext.Setup(t => t.HttpContext)
    .Returns(fakeHttpContext.Object);

var controller = InitMyontrollerConstroctor(controllerContext);

И вот как я инициализирую мой контроллер:

var controller = new MyController(IService service)
{
    ControllerContext = controllerContext.Object,
};

return controller;

Но свойство только для чтениясуществует внутри MyController, что зависит от HttpContext:

private static readonly string ServerPath = System.Web.HttpContext.Current.Server.MapPath("~/content/");

public ProfileController(IService service)
{

}

Когда я пытаюсь инициализировать мой контроллер, он выдает «Ссылка на объект не установлена ​​на экземпляр объекта».Не ошибка.Это потому, что HttpContext равен null .

Итак, как я могу поставить HttpContext на мой контроллер, не используя в качестве параметра конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...