单元测试在MVC 3上调用RenderPartialViewToString的函数

时间:2012-03-23 20:08:00

标签: asp.net-mvc-3 unit-testing

我想对使用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();
            }

        }

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以创建一个包装类,在内部使用ControllerContext时返回所需的数据,并将其替换为您的测试框架。

此外,对于这类事情,有一些测试框架允许替换静态,如Moles