在PHP中单独运行单元测试

时间:2011-09-15 23:18:56

标签: php unit-testing isolation

我在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”,因为它是没有帮助我解决这个问题。

1 个答案:

答案 0 :(得分:2)

您在PHP代码中所做的任何基准测试都会出现偏差。我建议使用Xdebug的分析功能来获得更准确的基准:http://xdebug.org/docs/profiler