【发布时间】:2010-09-01 20:35:02
【问题描述】:
我正在使用这个辅助方法将我的 PartialViewResult 转换为字符串并将其返回为 Json - http://www.atlanticbt.com/blog/asp-net-mvc-using-ajax-json-and-partialviews/
我的问题是我使用 Moq 来模拟控制器,并且每当我运行使用此 RenderPartialViewToString() 方法的单元测试时,我都会得到“对象引用未设置为对象的实例”。 ControllerContext 上的错误。
private ProgramsController GetController()
{
var mockHttpContext = new Mock<ControllerContext>();
mockHttpContext.SetupGet(p => p.HttpContext.User.Identity.Name).Returns("test");
mockHttpContext.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true);
// Mock Repositories
var mockOrganizationRepository = new MockOrganizationRepository(MockData.MockOrganizationsData());
var mockIRenderPartial = new BaseController();
var controller = new ProgramsController(mockOrganizationRepository, mockIRenderPartial);
controller.ControllerContext = mockHttpContext.Object;
return controller;
}
这会返回一个代理控制器,也许这就是我收到该错误的原因。知道如何对此进行单元测试吗?
非常感谢。
【问题讨论】:
-
NullReferenceException出现在哪里确切? -
它发生在 ControllerContext 上,我认为因为 Moq 正在模拟控制器并且只返回代理......这是行: ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);当我将鼠标悬停在 ControllerContext.Controller 上时,它为空。谢谢,
-
在 RouteData 中设置“controller”和“action”参数后,我也遇到了这个异常。完整堆栈跟踪:pastebin.com/S8c26JLD
标签: asp.net-mvc unit-testing asp.net-mvc-2 moq