Asp.net MVC中使用Razor Generator实现View的单元测试
Asp.net MVC 3 应用程序中,单元测试对项目的质量意义重大。除了对Model,Controller进行单元测试,有时还需要对View也进行。对View进行测试目前并不容易做,大多数情况下可能做的是BlackBox测试。现在可以使用Razor Generator简化对Razor View单元测试。你可以从这里安装 VS2010的扩展。
然后在VIEW上右键属性,对Custom Tool 使用Razor Generator,如下图,它就生成一个对应名称的Class, 文件与View在同一位置。
然后我们看这个Class是这样的:
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "1.3.0.0")][System.Web.WebPages.PageVirtualPathAttribute("~/Views/Home/TestViewInOutTime.cshtml")]public class TestViewInOutTime : System.Web.Mvc.WebViewPage<dynamic>{public TestViewInOutTime(){}public override void Execute(){#line 1 "..\..\Views\Home\TestViewInOutTime.cshtml"Layout = null;#line default#line hidden WriteLiteral("\r\n<!DOCTYPE html>\r\n\r\n<html>\r\n<head>\r\n <title>TestViewInOutTime</title>\r\n</head" + ">\r\n<body>\r\n <div>\r\n <h1 id=\"titleOne\">This is your life</h1>\r\n </di" + "v>\r\n</body>\r\n</html>\r\n");}}
这个View的内容是:
@{ Layout = null; }<!DOCTYPE html><html> <head><title>TestViewInOutTime</title> </head> <body><div><h1 id="titleOne">This is your life</h1></div> </body> </html>
好的,接下来在你的单元测试项目中使用NuGet安装RazorGenerator.Testing, 它有下面的依赖组件同是安装:
HtmlAgilityPack
Moq
ReflectionMagic
接着我们就可以写这样的单元测试代码。
[TestMethod] public void TestGetGivenIdInnerHtmlFromViews() {//arrangevar views = new TestViewInOutTime();//actHtmlDocument doc = views.RenderAsHtml();HtmlNode node = doc.GetElementbyId("titleOne");//assertAssert.IsNotNull(node);Assert.AreEqual("This is your life", node.InnerHtml.Trim()); }
上面的代码您可能看到把当前View Render以后是一个HtmlDocument,这是HtmlAgilityPack中的类。HtmlAgilityPack是一个解析HTML的类库。
然后我们找到titleOne的结点比较的它的InnerHtml。那么对PartialView同样也可以:
Tel.cshtml内容是这样的:
021-77677878
代码是这样的:
[TestMethod] public void TestPartialView() {//arrangevar views = new Tel();//actHtmlDocument doc = views.RenderAsHtml();//assertAssert.IsNotNull(doc);Assert.AreEqual("021-77677878", doc.DocumentNode.InnerText); }
对Views的UnitTest本来就是棘手的事儿,因为View是在运行时编译的。但 Razor Generator 直接生成View类以方便我们测试它。那什么样产景下我们需要对View进行单元测试呢?有时我们没有必要比较整个输出的Html, 只需要比较是关键的某一段Html即可。
希望对您开发有帮助。
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。
Asp.net MVC中使用Razor Generator实现View的单元测试相关推荐
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 如何在 ASP.NET MVC 中集成 AngularJS
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...
- 获取ASP.NET MVC中的完整操作URL [重复]
本文翻译自:Getting full URL of action in ASP.NET MVC [duplicate] This question already has an answer here ...
- 通过源代码研究ASP.NET MVC中的Controller和View(二)
通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...
- ASP.NET MVC中你必须知道的13个扩展点
ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...
- Asp.net mvc中的Ajax处理
在Asp.net MVC中的使用Ajax, 可以使用通用的Jquery提供的ajax方法,也可以使用MVC中的AjaxHelper. 这篇文章不对具体如何使用做详细说明,只对于在使用Ajax中的一些需 ...
- 在 ASP.NET MVC 中使用 Chart 控件
在 .NET 3.5 的时候,微软就提供了一个 Chart 控件,网络上有大量的关于在 VS2008 中使用这个控件的文章,在 VS2010 中,这个控件已经被集成到 ASP.NET 4.0 中,可以 ...
- 在ASP.NET MVC中使用IIS级别的URL Rewrite
在ASP.NET MVC中使用IIS级别的URL Rewrite 原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的 ...
最新文章
- Jackson学习笔记(三)转
- 最小生成树实验报告c语言,算法与程序设计实验最小生成树(c语言).ppt
- 数字图像处理目录列表
- python小技巧:获取字典中值最大者的key
- HD_1166敌兵布阵
- ios 不同的数据类型转化为json类型
- 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动 8
- 一种替代的多生产者方法
- unzip不能解压mysql的zip_Linux中zip压缩和unzip解压缩命令详解
- Python面试题-交换两个数字的三种方法
- macOS Safari使用EasyConnect插件的坑
- javaWeb实现裁剪图片上传整套方案
- AHRS(航姿参考系统)和IMU(惯性测量单元)的区别
- 自动化测试之Appium
- ios APP加密探究几维安全iOS 代码混淆效果参考
- 卫生事业单位计算机科学与技术,卫生事业单位考试-计算机科学与技术的知识点.doc...
- 不要使用矿泉水瓶接热水喝——致癌
- XSS和CSRF两种跨站攻击比较
- 【拓展】编程语言中的“前浪”和“后浪”
- Cisco 9100系列AP清空配置
热门文章
- python将object转换为float_如何在python中将datatype:object转换为float64?
- java中Assert使用
- Win32 Application 、Win32 Console Application、MFC工程项目
- VSCode + PYQT5 + QtDesigner
- 26所高校联合建议:尽快设置人工智能本科专业
- 百度“追杀”66天后,景驰CEO王劲离职,原CTO韩旭接任
- 对话彭军、楼教主:1.12亿美元融资来了,Pony.ai车队也已在路上 | 变局者
- 离模拟世界又近一步!谷歌推出开源量子计算平台OpenFermion
- 苹果自动驾驶测试车近距离实拍,头顶新添传感器和硬件
- 摩拜前端周刊第10期