Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MVC web应用程序中的控制器应该是可单元测试的吗?_Php_Ruby On Rails_Asp.net Mvc_Unit Testing_Model View Controller - Fatal编程技术网

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

Php MVC web应用程序中的控制器应该是可单元测试的吗?,php,ruby-on-rails,asp.net-mvc,unit-testing,model-view-controller,Php,Ruby On Rails,Asp.net Mvc,Unit Testing,Model View Controller,在我看来,不同编程语言的web开发人员在这个问题上常常有不同的看法。例如,Ruby web开发人员(Rails是主要框架)似乎认为控制器是粘合代码,应该进行功能测试,而不是单元测试。类似的态度在PHP世界占据主导地位,但也有一些主动性(例如Symfony2) 然而,例如,一些ASP.NETMVC开发人员似乎也在实际工作 我想知道的是,这是否真的适用于web开发。控制器值得进行单元测试吗?将它们设计为可单元测试会显著削弱非平凡应用程序的开发速度吗?还有,是否有任何web框架试图强制执行控制器单元的

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

然而,例如,一些ASP.NETMVC开发人员似乎也在实际工作


我想知道的是,这是否真的适用于web开发。控制器值得进行单元测试吗?将它们设计为可单元测试会显著削弱非平凡应用程序的开发速度吗?还有,是否有任何web框架试图强制执行控制器单元的可测试性?欢迎个人体验。

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

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

现在,我倾向于错过控制器级单元测试,而支持模型和业务对象的强大单元测试覆盖率以及Cucumber的功能测试覆盖率。这里的假设是,控制器是非常轻量级的对象,将数据路由到封装绝大多数业务逻辑的底层模型中

然而,我仍然倾向于在控制器级别对一些控制流进行一些非常轻的覆盖。这更像是一种精神检查


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

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

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