【问题标题】:How to unit-test a razor-view如何对剃刀视图进行单元测试
【发布时间】:2016-01-30 22:31:17
【问题描述】:

当 Scott Guthrie first blogged on Razor 时,他写道

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

但是,我找不到其他关于剃须刀可测试性的声明(或示例)。 有一些使用 CodelanguageServieRazorGeneratorsome self-made renderer 的指针——我称之为“设计使然”。

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

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

我知道有loads of questions like this one,但是大部分都比较老了……

【问题讨论】:

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


    【解决方案1】:

    我认为您可以对任何 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以检查内容是否符合规范。

    【讨论】:

    • 这个建议仍然需要一个控制器,包括控制器上下文和提供的各种属性。虽然它们可以在某种程度上被嘲笑,但这段代码 - 在使用有效 HttpContext.Current 运行的控制器之外 - 在System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath(VirtualPath virtualPath, Boolean& keyFromVPP) 中运行到 NRE (NullReferenceException)。因此,寻找一种简单的方法来测试视图,例如继续执行RazorView.Render(string viewName, object model) 之类的内容。视图/部分似乎仍然不可测试。
    猜你喜欢
    • 2011-11-01
    • 2023-03-18
    • 1970-01-01
    • 2018-08-30
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多