我使用这个辅助方法,把我的PartialViewResult成字符串并返回它作为JSON - http://www.atlanticbt.com/blog/asp-net-mvc-using-ajax-json-and-partialviews/ASP.NET MVC - 单元测试与Moq框架RenderPartialViewToString()?
我的问题是,我使用起订量来模拟控制器,每当我运行单元测试使用这个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'发生? – bzlm 2010-09-02 06:52:14
它发生在ControllerContext上,我认为是因为Moq嘲笑控制器并且只返回代理...这是行: ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,viewName); 当我将鼠标悬停在其上时,ControllerContext.Controller为空。 谢谢, – Saxman 2010-09-02 15:55:19
在RouteData中设置“controller”和“action”参数后,我也收到了这个异常。全堆栈跟踪:http://pastebin.com/S8c26JLD – EMP 2011-07-19 11:28:03