Используя 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
на мой контроллер, не используя в качестве параметра конструктора.