在HtmlHelper上进行扩展方法的单元测试

6
我有一个HTMLHelper扩展方法,可以将HTML输出到Response.Write中。如何进行单元测试呢?
我考虑模拟传递给该方法的HtmlHelper,但是不确定应该如何验证发送到Response.Write的HTML。
谢谢。
3个回答

5
如果您正在使用HTML助手将文本输出到浏览器,为什么不让其返回字符串,在视图中执行类似于...的操作呢?
<%=Html.YourExtension() %>

这使得它更易于进行测试。

祝好,

Dan

编辑:

修改将是签名的更改。

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

为了

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

已编辑并应用所建议的修改。 - Daniel Elliott

1

我使用以下代码来测试和验证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);

0

如果方法“YourExtension”仅使用返回字符串或HtmlString的HtmlHelper方法,则此方法有效。但是像“BeginForm”这样的方法返回MvcForm对象,并且表单标记直接写在TextWriter上,而HtmlHelper具有对其的引用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接