使用RazorGenerator对视图View进行单元测试

 

     在ASP.NET MVC里我们可以很方便的对模型Model、控制器Controller进行单元测试,但对于

视图View的测试就没那么容易和直接了。在这里介绍一种方法,使用RazorGenerator对View进行

单元测试。

 

       废话不多说,直接上图。主要方法和步骤如下:

 

       1、创建ASP.NET MVC 项目和相应的测试项目。

 

        2、在Web项目中nuget添加包:RazorGenerator.MsBuild。

 

        3、在测试项目中nuget添加包:RazorGenerator.Testing;添加包 NUnit

 

        4、在Web项目中修改待测试的代码 Views\Shared\Error.cshtml

@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = "Error";
}


<div id="content">
    <h1 class="text-danger">Error.</h1>
    <h2 class="text-danger">An error occurred while processing your request.</h2>
</div>

 

         5、在Web测试项目添加测试代码

using System;
using System.Linq;
using System.Web.Mvc;
using HtmlAgilityPack;
using NUnit.Framework;
using RazorGenerator.Testing;

namespace WebApplication1.Tests.Views.Shared
{
    [TestFixture]
    public class ErrorTest1
    {
        [Test]
        public void TestMethod1()
        {
            AssertHtml<ASP._Views_Shared_Error_cshtml, HandleErrorInfo>("content",
@"<h1 class=""text-danger"">Error.</h1>
    <h2 class=""text-danger"">An error occurred while processing your request.</h2>");
        }

        public static HtmlDocument Render<TView,TModel>()
           where TView : WebViewPage<TModel>, new()
        {
            TView view1 = new TView();
            WebViewPage<TModel> view = view1 as WebViewPage<TModel>;
            HtmlDocument doc = view.RenderAsHtml();
            Assert.IsEmpty(doc.ParseErrors.Where(x => x.Code != HtmlParseErrorCode.EndTagNotRequired));
            return doc;
        }

        public static void AssertHtml<TView, TModel>(string containerId, string expected, bool collapsed = false)
           where TView : WebViewPage<TModel>, new()
        {
            HtmlDocument doc = Render<TView,TModel>();
            expected = expected.Replace("\r\n", "\n");
            string actual =  doc.GetElementbyId(containerId).InnerHtml.Trim().Replace("\r\n", "\n");
            Assert.AreEqual(expected, actual);
        }
    }
}

 

      6、运行测试,测试通过。

     

posted @ 2016-06-05 22:06  笑风沙  阅读(776)  评论(1编辑  收藏  举报