上海百维科技,上海网站建设 上海软件开发公司热线电话:021-57700304  
  首 页 产品与服务 软件定制 成功案例 思源优势 技术学院 关于我们 联系我们
 
 
思源软件学院 >>> 根目录>>.NET技术>>ASP.NET MVC >>>Asp.net MVC中应用Razor Generator实现View的单位测试
人生价值,应该看他贡献什么,而不是取得什么。——爱因斯坦(上海网站建设)

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。

 

上海软件开发公司业务部:黄浦区重庆北路211号602室 | 上海软件开发公司技术部:松江区天云路259号| 上海软件开发公司综合部:松江区南期昌路346弄50号401室
上海软件开发 Copyright © 2005-2010 All Rights Reserved 电话:021-57616508  传真:57661889
沪ICP备05011021号