我有一个HTMLHelper扩展方法,可以将HTML输出到Response.Write中。如何进行单元测试呢?
我考虑模拟传递给该方法的HtmlHelper,但是不确定应该如何验证发送到Response.Write的HTML。
谢谢。
我考虑模拟传递给该方法的HtmlHelper,但是不确定应该如何验证发送到Response.Write的HTML。
谢谢。
<%=Html.YourExtension() %>
这使得它更易于进行测试。
祝好,
Dan
编辑:
修改将是签名的更改。
public static void YourExtension(this HtmlHelper html)
{
...
Response.Write(outputSting);
}
为了
public static string YourExtension(this HtmlHelper html)
{
...
return outputSting;
}
我使用以下代码来测试和验证HTML助手。如果您正在进行任何复杂的操作,例如基于一次性的助手(如beginform)或具有依赖关系的助手,则需要比仅查看单个助手的字符串更好的测试框架。
验证是另一个例子。
请尝试以下内容:
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);
如果方法“YourExtension”仅使用返回字符串或HtmlString的HtmlHelper方法,则此方法有效。但是像“BeginForm”这样的方法返回MvcForm对象,并且表单标记直接写在TextWriter上,而HtmlHelper具有对其的引用。