我目前正试图掌握MSpec,主要是学习(T/B)DD的新方法,以便能够对使用哪种技术做出明智的决定。以前,我主要(阅读:只)使用了内置的MSTest框架和Moq,所以BDD对我来说是很新的。
我正在编写一个ASP.NET MVC应用程序,我想实现PRG。上一次我这样做时,我使用动作过滤器通过TempData导出和导入TempData,这样我就可以返回一个RedirectResult,当用户获得视图时,验证错误仍然存在。我通过验证两件事来测试这个场景:
( a)应用了我编写的ExportModelStateAttribute (在我的控制器测试中)
( b)属性起作用(在用于操作筛选属性的测试中)
然而,在BDD中,我理解我应该更加关注行为,而更少关注实现。这意味着,当操作完成时,我可能应该验证模型状态是否处于tempdata状态,而不一定是通过属性完成的。
更复杂的是,在测试中直接调用操作时不会运行属性,所以我不能只调用操作并查看任务是否已经完成。
我应该如何规范/测试MSpec?
发布于 2010-05-31 01:55:07
过滤器是横切关注点,因此您应该独立于其应用位置测试过滤器的行为(否则会重复大量测试)。
您仍然可以在控制器测试中表示所需的行为(模型状态存储在临时数据中),但是测试可以断言属性的存在(可以封装在行为中?)。
作为一个旁白: ASP.NET MVC是按照在模型状态包含错误时返回视图的约定设计的。在这些场景中使用PRG确实是有意义的,因为PRG的设计是为了停止重复的表单提交和处理(即有效请求)。当用户发布无效表单时,在开始处理请求之前检查错误,因此停止处理用户请求。
https://stackoverflow.com/questions/2871941
复制相似问题