我想对使用RenderPartialViewToString渲染Json的控制器动作进行单元测试。 我使用NSubstitute作为测试框架。这里的问题是因为使用了ControllerContext,这在测试envoironnement中是不可用的。
protected string RenderPartialViewToString(string viewName, object model) {
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
ViewBag.RepositoryFactory = this.RepositoryFactory;
using (StringWriter sw = new StringWriter()) {
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
感谢任何帮助。
答案 0 :(得分:0)
您可以创建一个包装类,在内部使用ControllerContext时返回所需的数据,并将其替换为您的测试框架。
此外,对于这类事情,有一些测试框架允许替换静态,如Moles