我是这个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]
属性是否存在?这似乎非常具有结构性,并且不太可能在重构中存活下来;功能性的东西可能更有意义。有什么想法吗?
答案 0 :(得分:1)
您只有两个选择:
<强>第一强>
编写承载MVC in-proc的集成测试,或使用浏览器(例如使用Watin)运行,它将覆盖您的场景。
<强>第二强>
编写单元测试,检查该方法是否标有所需属性。
我会选择第一个选项。