ActionFilter
我的控制器级有一个.OnActionExecuting
在Web应用程序中调用控制器的操作时,将调用该方法.
现在我Action
在一个UnitTest中调用:
NiceController niceController = new NiceController(); ActionResult result = niceController.WhateverAction();
有没有办法让ActionFilter调用?
为了自动调用ActionFilter,您将需要运行控制器动作调用程序.这是可能的,但这意味着MVC框架将尝试并执行结果.这意味着您必须使用模拟来删除结果的执行.同样,这是可能的,但这意味着您的单元测试变得比实际代码更多.直接测试滤波器可能更正确.毕竟,OnActionExecuting被调用的事实是框架的一个特性,您不需要对框架本身进行单元测试.
但我认为你真正要说的是你要测试WhateverAction,除非ActionFilter已执行,否则该操作无效.
首先,我会问这个设计的问题.它是否正确?有可能.例如,具有Authorize属性的操作可以假设在执行时有一个登录用户是合理的.当然,行动应该对此进行测试,但这种假设是安全的.另一方面,操作可能不需要过滤器来执行特定于操作的初始化.所以你应该问这个问题,但答案很清楚,设计是正确的.
在这种情况下,单元测试的最佳决策可能是在单元测试中手动执行过滤器,并编写单独的单元测试,证明操作使用正确的属性进行修饰.