代码之家  ›  专栏  ›  技术社区  ›  Ignas R

mvcweb应用程序中的控制器应该是可单元测试的吗?

  •  9
  • Ignas R  · 技术社区  · 14 年前

    在我看来,不同编程语言的web开发人员在这个问题上常常有不同的看法。例如,RubyWeb开发人员(Rails是主要的框架)似乎认为控制器是粘合代码,应该有功能测试,而不是单元测试。类似的态度在PHP世界中占主导地位,但也有一些主动性(例如Symfony2)。

    want their controllers to be unit-testable .

    3 回复  |  直到 7 年前
        1
  •  4
  •   Toby Hede    14 年前

    简短回答:“是”加“如果”,长回答:“否”加“但是”

    控制器级测试的一个问题是,为了有效地进行测试,您通常必须模拟或生成大量的模型和对象。有鉴于此,我发现将这些测试推进到功能层更有价值,在功能层中,测试样式允许您更有效地表达这些依赖关系(通过应用程序本身或通过Cucumber的声明性规则之类的系统显式地遵循生成这些依赖关系所需的步骤)。

        2
  •  2
  •   Łukasz W.    14 年前

    一切都值得进行单元测试。在这种情况下,这取决于控制器中实现了多少逻辑。。。在小型项目中,您可以不附加任何外部逻辑,并且您可能希望在控制器中执行一些数据库操作(就像许多Microsoft示例中一样)。在更大的解决方案中,您可能不需要测试控制器,因为它的工作只是调用指定的业务逻辑方法。。。这不是关于控制器是否值得进行单元测试,而是关于它们所包含的代码是否。。。

        3
  •  0
  •   Fenton    13 年前

    MVC模式的一个最好的特性是,可以通过视图将控制器与HTML输出隔离开来进行测试。将逻辑与HTML输出混合在一起的页面很难测试,这是MVC解决的问题之一—它使您的控制器完全依赖于逻辑,您可以在根本不解析HTML的情况下对其进行测试。

    理想情况下,您的控制器将从单独的数据访问类获取数据,您可以将这些数据存根出来进行测试,因此您只需测试逻辑即可。从本质上讲,您将控制器与数据库隔离,就像MVC将其与视图隔离一样—这样测试就很容易了,因为您也不需要一个包含测试数据的数据库。