人生价值,应该看他贡献什么,而不是取得什么。——爱因斯坦(上海网站建设)
Asp.net MVC中应用Razor Generator实现View的单位测试
Admin
2012年1月21日
       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 ute()
{
#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");
}
}
&#160;
这个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()
{
//arrange
var views = new TestViewInOutTime();
//act
HtmlDocument doc = views.RenderAsHtml();
HtmlNode node = doc.GetElementbyId("titleOne");
//assert
Assert.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()
{
//arrange
var views = new Tel();
//act
HtmlDocument doc = views.RenderAsHtml();
//assert
Assert.IsNotNull(doc);
Assert.AreEqual("021-77677878", doc.DocumentNode.InnerText);
}
对Views的UnitTest底本就是棘手的事儿,因为View是在运行时编译的。但 Razor Generator 直接生成View类以便利我们测试它。那什么样产景下我们须要对View进行单位测试呢?有时我们没有须要斗劲全部输出的Html, 只须要斗劲是关键的某一段Html即可。
&#160;
欲望对您开辟有帮助。
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,迎接转载,但未经作者赞成必须保存此段声明,且在文章页面明显地位给出原文连接,不然保存究查法令义务的权力。
该文章也同时公布在我的自力博客中-Petter Liu Blog。
|