为什么使用 PHPUnit 比创建自己的测试脚本更好


Why is using PHPUnit better than creating your own testing script?

浏览文档,我看到PHPUnit只提供以下功能:

http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.assertions

所有这些都可以在自定义测试脚本中非常轻松地实现,在不到 1K 行的范围内......

PHPUnit有2 MB的文件(大约200个),其中包括大量的类。此外,PHPUnit 仅从命令行运行:(

创建自己的脚本不是更好的主意吗?

PHPUnit 是一头野兽。它很大,有时有点违反直觉,而且它有它的缺陷。您的代码自然会直观,并且完美无缺地满足您的直接需求。我也经常思考编写自己的测试框架是否不是向前迈出的一步,但是......不是。您可以在一天内完成一个基本的测试框架,但是:

  • PHPUnit 集成在大多数现代 IDE 中;
  • PHPUnit 很好地与 XDebug 配合使用,用于代码覆盖率报告;
  • PHPUnit可以与Selenium一起进行集成测试;
  • PHPUnit 被许多程序员使用,这意味着您的测试对很多人来说都是一目了然的;
  • PHPUnit可以集成到CI设置中,如Travis CI。
  • PHPUnit 有一个模拟库;
  • 最重要的是:PHPUnit 有效

有很多理由反对自己写。

@hakre没有触及的两点:

代码覆盖率

对代码覆盖率进行漂亮的报告(可视化执行了多少代码)并不是那么容易,即使 xDebug 使您能够快速开始,有一些边缘情况和烦恼需要花费相当长的时间来构建。

PHPUnit helps you out with a nice report.

报告

测试时最重要的是能够快速找出问题所在。

自己为PHP中的所有内容(异常,对象,字符串,xml,json等)构建a nice diff非常耗时

此外,在某些时候,您将希望迁移到像Jenkins这样的连续集成服务器,而像PHPUnit这样的测试框架已经产生了所有需要的工件(junit.xml,clover.xml),使您能够set up CI for your projects in half an hour

<小时 />

因此,总而言之,即使您不使用所有高级功能和帮助程序(如模拟、进程隔离来测试遗留代码、outputBuffering、异常帮助程序),您也会获得一个基本设置,当您的项目增长并变得更加成熟时,该设置将能够与您一起成长。

仅限命令行界面

顺便说一句,有一种a web interface to phpunit称为Visual PHPUnit在浏览器中运行。即便如此,老实说,我不知道为什么有人会想要那个。也许没有刷新,但我宁愿在 cli 终端上使用脚本循环。但每个人都有自己的:)

创建自己的脚本不是更好的主意吗?

,这不是一个更好的主意。如果您创建自己的脚本,则您是在独自编程。使用 PHPUnit,您有一个庞大的用户社区来处理单元测试通常需要的各种功能,因此复制和共享代码以减少工作是有好处的。

它是软件,只有在复制时才会变坏。此外,它还带有许多输入(例如配置)和输出(测试结果格式,代码覆盖率,报告)以及集成(命令行运行器,IDE,CI服务器等)。当你今天开始的时候,你甚至不会接近某个地方。

但是,您可以在不使用 PHPUnit 的情况下开始测试驱动开发,并编写自己的测试。这对于学习TDD非常有用,并且更好地理解为什么要使用测试框架也很棒。

我认为上面涵盖了它,但由于没有标记正确答案,让我补充一下:不要犯行业中犯的经典错误,即要重新发明轮子。 如果已经有一个事实上的标准,并且社区和/或企业支持任何带有路线图的软件......使用它。 设计自己的解决方案带来的唯一好处是了解胆量如何更好地为其他已建立的解决方案工作。所以要回答你的问题,你能做到吗,是的,你应该,不,也许是有教育意义的。 为什么要使用PHP,你可以创建自己的语言。 为什么要使用框架X,你可以创建自己的框架。 你明白了。 除非你真的有一种独特的方法,清楚地展示了比流行的现有方法更好的产品,否则这是一条糟糕的道路。

我能想到使用phpunit而不是自定义测试的唯一原因是IDE支持以及它可以在单独的进程中运行测试的事实。当涉及到运行测试时,其他所有内容都可以使用自定义脚本轻松实现。

除了测试之外,phpUnit还提供了有用的功能,例如支持覆盖率,支持分析,支持在多个进程中运行测试,支持Xdebug。