【问题标题】:Does it make sense to unit test controllers对控制器进行单元测试是否有意义
【发布时间】:2009-11-23 07:30:27
【问题描述】:

我知道 Microsoft 和 MvcContrib 在使开发人员能够对控制器进行单元测试方面做出了巨大的尝试。但最近我一直在想我们是否应该放弃单元测试控制器,而将它们留给集成测试。我有两个原因:

  • 一个好的控制器不应该有任何逻辑,或者非常基本的最小逻辑。当然不是业务逻辑。它应该小而紧凑,并且依赖于应用程序服务来完成它需要做的事情。如果这些服务都经过了很好的测试,那么我还需要在控制器中测试什么?
  • 控制器基本上是用户与您的应用程序交互的方式。这就像 UI 一样,很容易发生变化。例如,我可能决定某一天某个特定动作属于不同的控制器。可以肯定的是,如果我们采用“无控制器动作”的范式,这一点可能没有那么强大。
  • 我是不是在这里离群索居?查看其他人的代码,我发现人们非常喜欢单元测试控制器。

    【问题讨论】:

      标签: asp.net-mvc unit-testing


      【解决方案1】:

      我也不总是对最简单的 MVC 控制器进行单元测试,但我发现了一些测试是有益的情况(至少在 Java Spring MVC 中):

      1. 当我创建一个控制器来修改用户会话中的某些内容时(例如,添加一个在整个站点中使用的会话属性)。它只是验证是否将正确的数据添加到会话中。
      2. 当控制器必须执行身份验证/授权检查以决定显示哪个视图时。我添加了 2 个测试用例,其中 1 个用户会话具有正确的凭据(断言它们被转发到所需的视图),而 1 个没有(断言它们被转发到登录视图)。

      【讨论】:

        【解决方案2】:

        查看this post 了解更多信息。

        简而言之,测试您的控制器非常适合检查(进程)是否正常工作,但我认为它们在调试方面几乎没有价值。

        我更喜欢对我的(单元)进行单元测试,以便我知道我从每个单元中得到了预期的结果。

        然后我将按顺序测试单元,最后是控制器,但只是为了完整性。

        从您的单元中编写适当的测试可以为您提供比来自控制器的高级消息更好的调试信息。

        【讨论】:

        • 对控制器进行两次测试是否有意义,一次作为 SUT(只是为了确保您传递正确的数据,比如说),另一次作为集成测试,或者功能测试?
        • 是的,我认为是的。单元测试将测试单个功能,并为您提供一种方法来测试当其他代码更改时单元是否损坏。然后集成测试测试端到端过程。最终用户体验将是什么。并非所有控制器都需要以这种方式进行测试,但可能包含许多 PartialViews 的复杂控制器可能需要自己的测试。您要编写的测试的粒度以及您对控制器代码的舒适程度取决于您。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 2012-04-24
        • 2017-04-26
        • 2018-09-19
        • 2015-04-03
        相关资源
        最近更新 更多