【问题标题】:How to unit test for turning off request validation?如何进行单元测试以关闭请求验证?
【发布时间】:2011-05-28 11:21:06
【问题描述】:

我是 TDD 方面的新手,但我正在认真努力,所以我希望在这里得到一些反馈。

我创建了一个小型 Web 服务来缩小 JavaScript,一切都很好,我的所有测试都通过了。然后我注意到了一个错误:如果我尝试缩小alert('<script>');,它会抛出一个HttpRequestValidationException

所以这很容易解决。我只需将[AllowHtml] 添加到我的控制器中。但是,什么是单元测试未来不会发生的好方法?

以下是我的第一个想法:

[TestMethod]
public void Minify_DoesntChokeOnHtml()
{
    try
    {
        using (var controller = ServiceLocator.Current.GetInstance<MinifyController>())
        {
            return controller.Minify("alert('<script></script>');");
        }
    }
    catch (HttpRequestValidationException)
    {
        Assert.Fail("Request validation prevented HTML from existing inside the JavaScript.");
    }
}

但是,这不起作用,因为我只是获取一个控制器实例并在其上运行方法,而不是启动整个 ASP.NET 管道。

对此有什么好的单元测试?也许控制器方法上的反射器可以查看[AllowHtml] 属性是否存在?这似乎非常结构化,并且不太可能在重构中幸存下来;功能性的东西可能更有意义。有什么想法吗?

【问题讨论】:

    标签: asp.net unit-testing asp.net-mvc-3 request-validation


    【解决方案1】:

    你只有两个选择:

    第一

    编写集成测试,该测试在进程内托管 MVC 或使用浏览器(例如使用 Watin)运行,以涵盖您的场景。

    第二

    编写单元测试来检查方法是否被标记为需要的属性。

    我会选择第一个选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多