模拟一个控制器,它具有一个依赖于Httpcontext的只读属性

时间:2018-05-19 12:06:34

标签: c# asp.net-mvc unit-testing moq

使用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);

以下是我初始化mycontroller的方法:

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)
{

}

当我尝试初始化我的控制器时,它会抛出&#34;对象引用未设置为对象的实例。&#34;不是错误。这是因为HttpContext null

那么,如何在不使用构造函数的参数的情况下向控制器提供HttpContext

0 个答案:

没有答案