如果我使用自定义ActionMethodSelectorAttribute修饰控制器操作,则在标准使用期间会计算该属性,并且可以在调试会话期间中断该属性的主体。但是,当在单元测试期间调用控制器操作时,不会对该属性进行评估,也不会在调试期间中断该属性。为什么会这样呢?无论是正常运行还是在测试中,行为都应该是相同的。
谢谢
发布于 2010-12-07 03:28:56
负责运行操作过滤器的是ASP.NET MVC框架。在内部,它使用反射来检查控制器和操作方法,如果该方法或控制器用任何ActionFilter属性修饰,它将在请求生命周期中的适当位置运行这些过滤器。
对于单元测试,您需要分别对您的操作过滤器进行单元测试--将模拟的结果(或任何您正在过滤的上下文)直接注入到filter方法中,并验证路由/结果/视图数据是否根据需要进行了修改。
如果你真的致力于100%的测试覆盖率,你也可以实现单元测试,它将使用反射来验证你已经获得了装饰适当控制器方法所需的操作过滤器属性。
不要担心确保动作过滤器被触发的测试--这些测试是ASP.NET MVC源代码的一部分,我最后一次查看时,它们都是绿色的。
发布于 2010-12-07 03:25:27
该属性将由MVC框架的某些部分通过在控制器上反映并调用所需的方法来调用。如果你的测试看起来像这样:
Controller testController = new YourController(dependecies);
ActionResult result = testController.Action();
//assert on result则不会有任何东西处理该属性,因此不会命中断点。
https://stackoverflow.com/questions/4370060
复制相似问题