2010-12-20 106 views
2

我是TDD的新手,但认真努力,所以我希望能在这里得到一些反馈。如何进行单元测试以关闭请求验证?

我创建了一个小型web服务来缩小JavaScript,并且所有的测试都通过了,而且都很好。然后我发现了一个bug:如果我试图缩小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]属性是否存在?这看起来非常结构化,并且不太可能在重构中幸存下来;功能可能更有意义。有任何想法吗?

回答

1

你只有两个选择:

首先

集成测试承载MVC进程内运行或使用浏览器(使用华廷例如),将覆盖你的情况。

单元测试,将检查该方法标有需要的属性。

我会去第一个选项。