使用MSpec测试ActionFilterAttributes

时间:2010-05-20 08:02:07

标签: asp.net-mvc bdd action-filter mspec

我目前正在努力掌握MSpec,主要是为了学习(T / B)DD的新方法,以便能够对使用哪种技术做出明智的决定。以前,我主要(只读)只使用Moq内置的MSTest框架,所以BDD对我来说是个新鲜事。

我正在编写一个ASP.NET MVC应用程序,我想实现PRG。上次我执行此操作时,我使用操作过滤器通过ModelState导出和导入TempData,以便我可以返回RedirectResult,当用户获得时,验证错误仍然存​​在视图。我通过验证两件事来测试那个场景:

a)我编写的ExportModelStateAttribute已应用(在我的控制器的测试中)
b)该属性有效(在动作过滤器属性的测试中)

然而,在BDD中,我知道我应该更关注行为,更不用说实施了。这意味着我可能只需要在动作执行完毕后验证模型状态是否在tempdata中 - 不一定是通过属性完成的。

为了进一步复杂化,在测试中直接调用操作时不会运行属性,因此我不能只调用操作并查看作业是否已完成。

我应该如何在MSpec中对此进行规范/测试?

1 个答案:

答案 0 :(得分:1)

过滤器是交叉问题,因此您应该独立于应用的位置测试过滤器的行为(否则您将复制大量测试)。

您仍然可以在控制器测试中表达所需的行为(模型状态存储在临时数据中),但是测试可以断言属性的存在(可以封装在一个行为中吗?)。

暂且不谈: ASP.NET MVC的设计具有在模型状态包含错误时返回视图的约定。在这些场景中使用PRG确实有意义,因为PRG旨在阻止重复的表单提交和处理(即有效请求)。当用户发布无效表单时,在开始处理请求之前检查错误,从而停止处理用户请求。