asp.net-mvc - 如何在 ASP.NET MVC 中对 ActionFilter 进行单元测试?

标签 asp.net-mvc unit-testing

有一个ActionFilter在我的 Controller 类上。 OnActionExecuting方法在 Web 应用程序中调用 Controller 的操作时被调用。

现在我调用 Action在单元测试中:

    NiceController niceController = new NiceController();
    ActionResult result = niceController.WhateverAction();

有没有办法让 ActionFilter 被调用?

最佳答案

为了自动调用 ActionFilter,您将需要运行 Controller 操作调用程序。这是可能的,但这意味着 MVC 框架将尝试执行结果。这意味着您必须使用模拟来消除结果的执行。同样,这是可能的,但这意味着您的单元测试变得比实际代码更多的模拟。直接测试过滤器可能更正确。毕竟,调用 OnActionExecuting 是框架的一个特性,你不需要对框架本身进行单元测试。

但是我认为您真正要说的是您想要测试 WhatAction,并且除非 ActionFilter 已执行,否则该操作无法工作。

首先,我会问有关此设计的问题。 这样对吗? 有可能。例如,具有 Authorize 属性的操作可以假定执行时有一个登录用户是合理的。当然, Action 应该对此进行测试,但假设是安全的。另一方面, Action 可能不需要过滤器来执行特定于 Action 的初始化。所以你应该问这个问题,但答案很可能是设计是正确的。

在这种情况下,单元测试的最佳决策可能是在单元测试中手动执行过滤器,并编写一个单独的单元测试来证明操作被正确的属性修饰。

关于asp.net-mvc - 如何在 ASP.NET MVC 中对 ActionFilter 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609942/

相关文章:

unit-testing - EF、DAL 外观和单元测试

javascript - 如何正确地对 Angular 指令进行单元测试

asp.net-mvc - X-SourceFiles header 有什么作用?

c# - 使用中的错误案例列表 _userManager.CreateAsync(user, password)

asp.net-mvc - linux 开发环境中.net MVC 的等价物是什么?

c# - 如何将基于约定的自定义与 AutoFixture 的 [AutoData] 属性相结合?

c# - 将模型导出到数据表

C# ASP .Net MVC 4 可变长度路由映射

python - 导入模块并使用它时单元测试属性错误

unit-testing - 我如何告诉 Makemaker 并行运行测试?