在PHP中单独运行单元测试


Running a unit test in isolation in PHP

我已经用PHP创建了一个基本的单元测试套件。它显示测试是否通过以及执行测试所花费的时间。它工作得很好,但是我遇到了一个问题,我不知道如何解决它。每个单元测试类的每个初始单元测试似乎总是比该类中的其他单元测试花费更多的时间来执行,通常是一个显著的因素。

例如:

TestClass1

  • Test1.1 (0.042395)
  • Test1.2 (0.000392)
  • Test1.3 (0.000325)
  • Test1.4 (0.000645)

TestClass2

  • Test2.1 (0.042395)
  • Test2.2 (0.000392)
  • Test2.3 (0.000325)
  • Test2.4 (0.000645)

我假设初始测试时间也考虑了资源负载,但我似乎无法使第一次测试与其他时间一致。每个测试都有运行的setUp和tearDown方法。我也试过用不同的名字重复完全相同的测试,它在预期的更短时间内运行,所以第一个测试总是有一些开销。

PHP没有任何类型的unloadClass或unloadFile函数,所以我不确定如果第一个测试有将资源加载到内存中的开销,我是否可以为每个测试重新创建一致的测试环境。我尝试过预加载文件和初始化类,但似乎都没有影响。

是否有其他可能我可能会错过,可能会影响初始测试时间?解决这个问题的正确方法是什么?

:我知道现有的PHP单元测试框架,但我试图做一些不同的东西,所以请不要说,"只使用PHPUnit",因为它对帮助我解决这个问题没有帮助。

您在PHP代码中做的任何基准测试都将被扭曲。我建议使用Xdebug的分析特性来获得更准确的基准测试:http://xdebug.org/docs/profiler