2009-12-14 73 views
5

我有一个输出HTML到Response.Write的HTMLHelper扩展方法。如何最好的单元测试呢?单元测试HtmlHelper上的扩展方法

我在考虑嘲讽传入方法的HtmlHelper,但我不确定如何验证发送给Response.Write的HTML。

感谢

回答

5

如果您使用的是HTML辅助函数输出文本浏览器,为什么不把它返回一个字符串,并在您看来做这样的事情......

<%=Html.YourExtension() %> 

它使一个更多的可测试性。

善良,

编辑:

的修改是将签名的变化

public static void YourExtension(this HtmlHelper html) 
{ 
    ... 
    Response.Write(outputSting); 
} 

public static string YourExtension(this HtmlHelper html) 
{ 
    ... 
    return outputSting; 
} 
+0

Editted与所建议的修改 – 2009-12-14 10:51:01

0

这工作如果T他的方法“YourExtension”只是使用返回字符串或HtmlString的HtmlHelper方法。但是像“BeginForm”这样的方法会返回MvcForm对象,并且表单标记也会直接写在HtmlHelper引用的TextWriter上。

1

我使用下面的代码来测试和验证html助手。如果你正在做任何复杂的事情,比如beginform或helper等基于一次性的助手,你需要一个更好的测试框架,然后再看看单个助手的字符串。

验证是另一个例子。

尝试以下方法:

 var sb = new StringBuilder(); 
     var context = new ViewContext(); 
     context.ViewData = new ViewDataDictionary(_testModel); 
     context.Writer = new StringWriter(sb); 
     var page = new ViewPage<TestModel>(); 
     var helper = new HtmlHelper<TestModel>(context, page); 

     //Do your stuff here to exercise your helper 


     //Get the results of all helpers 
     var result = sb.ToString(); 

     //Asserts and string tests here for emitted HTML 
     Assert.IsNotNullOrEmpty(result);