码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-06-05 23:06:51      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:

 

     在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、运行测试,测试通过。

技术分享

     

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

标签:

原文地址:http://www.cnblogs.com/weightbomb/p/5562021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!