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

为什么使用PHPUnit比创建自己的测试脚本更好?,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,查看文档,我发现PHPUnit仅提供以下功能: 所有这些都可以很容易地在一个定制的测试脚本中实现,只需不到1K行 PHPUnit有2MB的文件(大约200个),其中包含大量的类。 此外,PHPUnit仅从命令行运行:( 创建自己的脚本不是更好的主意吗 创建自己的脚本不是更好的主意吗 不,这不是一个更好的主意。如果您创建自己的脚本,那么您就是在独自编程。使用PHPUnit,您有一个庞大的用户社区,负责单元测试通常需要的各种功能,因此复制和共享代码可以减少工作量 它是软件,只有在被复制时才会变差。

查看文档,我发现PHPUnit仅提供以下功能:

所有这些都可以很容易地在一个定制的测试脚本中实现,只需不到1K行

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

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

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

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

它是软件,只有在被复制时才会变差。此外,它还包含许多输入(例如配置)和输出(测试结果格式、代码覆盖率、报告)以及集成(命令行运行程序、IDE、CI服务器等)。从今天开始,您甚至无法接近这些功能


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

有两点@hakre没有提到:

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

报告 测试时最重要的是能够快速找出哪里出了问题

为PHP中的所有内容(异常、对象、字符串、xml、json等)构建自己是相当耗时的

另外,在某个时候,您还需要迁移到一个持续集成服务器,比如PHPUnit,一个测试框架,它已经生成了所有需要的工件(junit.xml、clover.xml),使您能够


因此,总而言之,即使您没有使用所有高级功能和帮助工具(如模拟、测试遗留代码的流程隔离、输出缓冲、异常帮助工具),您也可以获得一个基本设置,当您的项目增长并变得更成熟时,它将能够与您一起增长

仅限CLI
顺便说一句,有一个在浏览器中运行的调用。即便如此,老实说,我也不知道为什么有人会想要它。也许没有刷新,但我宁愿在cli终端上有一个脚本循环,而不是。但对每个人来说:)

PHPUnit是一个野兽。它很大,有时有点违反直觉,而且有它的缺陷。您的代码自然是直观的,对于您的直接需求来说是完美的。我也经常思考,如果写我自己的测试框架不是一个进步,但是。。。它不是。您可以在一天内完成基本的测试框架,但是:

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

有很多理由反对自己写作。

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

事实上,如果没有自检,它略低于1M。但我建议您继续并实现自己的单元测试框架。当你完成它的时候(或者,更可能的是,放弃),你会得到你的答案…看看这些文件?文档从这里开始:-看左边。在PHPUnit;)中,除了断言之外,还有更多的内容但您是对的,从测试人员的角度来看,您首先与断言进行交互,但是断言函数本身并不能构成测试框架。因为它是用于“测试驱动开发”,而不是“开发后测试”。TDD来自敏捷方法。如果您需要测试遗留代码,请查看PHPUnit对非TDD也适用。从答案中可以清楚地看出,断言只占其功能的一小部分。同样相关的还有: