'System.Web.Mvc.ViewEngines'的类型初始值设定项引发了异常

时间:2017-01-03 11:54:31

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

我正在尝试对具有controllercontext参数的void方法进行单元测试,还有一些用于发送电子邮件。电子邮件模板使用视图引擎渲染局部视图我模拟了controllercontext。因此,渲染视图会抛出异常,因为ControllerContext具有空值。

public static string RenderViewToString(ControllerContext context, string viewPath, object model, bool partial = false)
        {
            var viewEngineResult = partial ? ViewEngines.Engines.FindPartialView(context, viewPath) : ViewEngines.Engines.FindView(context, viewPath, null);

            if (viewEngineResult == null)
                throw new FileNotFoundException("View cannot be found.");

            var view = viewEngineResult.View;
            context.Controller.ViewData.Model = model;

            var result = String.Empty;

            using (var sw = new StringWriter())
            {
                var ctx = new ViewContext(context, view,
                                            context.Controller.ViewData,
                                            context.Controller.TempData,
                                            sw);
                view.Render(ctx, sw);
                result = sw.ToString();
            }

            return result;
        }

2 个答案:

答案 0 :(得分:5)

您只需要在Nuget Package Manager的测试解决方案中安装Microsoft.Asp.Net.WebPages,然后尝试构建您的解决方案,然后您的单元测试就能正常运行。

enter image description here

答案 1 :(得分:1)

我不认为错误与您的代码有关。我认为它与你测试项目没有所有的依赖关系,在包mananger中,测试项目设置在Default项目intal

PM>安装包Microsoft.AspNet.WebPages

每次我在MVC项目上测试时,我都会忘记添加它。