我有一个输出HTML到Response.Write的HTMLHelper扩展方法。如何最好的单元测试呢?单元测试HtmlHelper上的扩展方法
我在考虑嘲讽传入方法的HtmlHelper,但我不确定如何验证发送给Response.Write的HTML。
感谢
我有一个输出HTML到Response.Write的HTMLHelper扩展方法。如何最好的单元测试呢?单元测试HtmlHelper上的扩展方法
我在考虑嘲讽传入方法的HtmlHelper,但我不确定如何验证发送给Response.Write的HTML。
感谢
如果您使用的是HTML辅助函数输出文本浏览器,为什么不把它返回一个字符串,并在您看来做这样的事情......
<%=Html.YourExtension() %>
它使一个更多的可测试性。
善良,
丹
编辑:
的修改是将签名的变化
public static void YourExtension(this HtmlHelper html)
{
...
Response.Write(outputSting);
}
到
public static string YourExtension(this HtmlHelper html)
{
...
return outputSting;
}
这工作如果T他的方法“YourExtension”只是使用返回字符串或HtmlString的HtmlHelper方法。但是像“BeginForm”这样的方法会返回MvcForm对象,并且表单标记也会直接写在HtmlHelper引用的TextWriter上。
我使用下面的代码来测试和验证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);
Editted与所建议的修改 – 2009-12-14 10:51:01