Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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
为什么phper不关心测试?_Php_Unit Testing_Testing - Fatal编程技术网

为什么phper不关心测试?

为什么phper不关心测试?,php,unit-testing,testing,Php,Unit Testing,Testing,在Java或Ruby中,有很多关于test/TDD/BDD的讨论。Java/Ruby项目中有很多测试 但我注意到,PHP项目中的测试较少,而且PHPer似乎不喜欢编写测试,我只是想知道原因。谢谢我使用了几种不同语言的应用程序或库,它们不包括单元测试。这不是PHP社区所独有的 事实上,PHP有几个可用的测试框架。开发人员可能出于任何原因选择不使用它们,或者可能不知道它们。毕竟,很多PHP开发人员都是自学成才的,没有经过正式的计算机科学培训 老实说,据我所知,大多数使用测试框架和其他生命周期工具的P

在Java或Ruby中,有很多关于test/TDD/BDD的讨论。Java/Ruby项目中有很多测试


但我注意到,PHP项目中的测试较少,而且PHPer似乎不喜欢编写测试,我只是想知道原因。谢谢

我使用了几种不同语言的应用程序或库,它们不包括单元测试。这不是PHP社区所独有的

事实上,PHP有几个可用的测试框架。开发人员可能出于任何原因选择不使用它们,或者可能不知道它们。毕竟,很多PHP开发人员都是自学成才的,没有经过正式的计算机科学培训


老实说,据我所知,大多数使用测试框架和其他生命周期工具的PHP开发人员往往已经在该领域工作了很长时间,或者来自Java等其他背景。

IMO有多种因素:

  • 对于PHPER来说,这是一个全新的概念。我自己不用它。大多数应用程序都是在没有契约式API设计的情况下编写的,因此(在实践中)代码会进行测试
  • 测试框架(PHPUnit和SimpleTest)不是自然的
  • PHP运行在与Ruby/Java不同的环境中。此外,应用程序部分被划分为包含脚本,这些脚本与包具有不同的语义;有时位置是可变的
  • PHP不像其他语言那样从核心面向对象。大多数代码是过程性的/混合的或混合的

到目前为止,我想问一下PHPs运行时环境的单元测试的优点。硒可能是一个更好的选择。但就我个人而言,我正在寻找一种更简单的方法:

在很大程度上取决于您的应用程序体系结构。一个坚实的面向对象PHP应用程序很容易用PHPUnit进行测试。正如您所说,将组件拆分为include脚本的过程代码可能无法很好地测试。这是开发人员/架构师的一个缺点,而不是PHP或测试框架的缺点。即使是过程代码也可以通过SnapTest等进行合理测试。很少有人编写过程性代码,然后想编写测试类。这就是phpunit&co公司被回避的主要原因。正如您所说,包含脚本和非过程性的意大利面代码不适合进行太多测试。不过,上面提到的脚本是一种广泛使用的PHP架构模式(想想视图和模板)。依我看,业务逻辑和视图/模板逻辑是可以/应该独立测试的。具有单元和集成测试的业务逻辑,以及具有Selenium和类似工具的视图/模板。我认为缺乏测试主要源于开发人员的无知或错误信息,但它肯定不是孤立于PHP的。PHP开发人员几乎没有可用的培训,尤其是在这些主题方面。我想我这么说是为了重申问题在于开发人员,而不是您的答案所暗示的语言。是的,许多PHP项目使用的是过程和OO的混合体。这当然不是因为PHP强制采用这种风格。众所周知!==写得好。仅仅因为一个项目被广泛使用并不能使代码成为如何使用该语言的光辉范例。这仅仅意味着应用程序的概念很流行。这是一种严重的过于简单化,只适用于爱好开发者的大军。TDD、单元测试和持续集成是非常重要的。