如何对剃刀视图进行单元测试

时间:2015-10-30 13:19:29

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

当Scott Guthrie first blogged on Razor,他写道

  

新的视图引擎实现将支持单元测试视图的功能(无需控制器或Web服务器,并且可以托管在任何单元测试项目中 - 无需特殊的应用程序域)。

但是,我找不到关于剃刀可测试性的其他声明(或示例)。 有指向使用CodelanguageServieRazorGeneratorsome self-made renderer - 非我称之为"设计"。

目前是否可以通过简单的方式对剃刀视图进行单元测试? (在asp.net mvc应用程序中,即。即NancyFx在其中带来了可测试性的nancy.testing-package。)

(目前我不在乎if views should be tested or not。)

我知道有loads of questions like this one,但其中大部分都比较陈旧......

1 个答案:

答案 0 :(得分:0)

我认为您可以对以下任何Razor视图进行单元测试:

ViewResult v = View("~/Views/Home/Index.cshtml");
            if (string.IsNullOrEmpty(v.ViewName))
                v.ViewName = RouteData.GetRequiredString("action");
            ViewEngineResult result = null;
            StringBuilder sb = new StringBuilder();
            StringWriter textwriter = new StringWriter(sb);
            HtmlTextWriter htmlwriter = new HtmlTextWriter(textwriter);
            if (v.View == null)
            {
                result = new ViewEngineResult(new RazorView(ControllerContext,"~/Views/Home/Index.cshtml", null,false,null), new RazorViewEngine());
                v.View = result.View;
            }
            ViewContext viewContext = new ViewContext(ControllerContext, v.View, ViewData, TempData, htmlwriter);
            v.View.Render(viewContext, htmlwriter);
            string html = sb.ToString();

在此之后,您可以解析html以检查规范中的内容。