追一个phpunit的潜规则引发的bug,顺便把phpunit的代码简单看了一遍:
记录如下:
Phpunit文件:
require_once 'PHPUnit/Util/Filter.php';
PHPUnit_Util_Filter::addFileToFilter(__FILE__, 'PHPUNIT');
require 'PHPUnit/TextUI/Command.php';
启动是从Command.php中开始,main:
调用$runner->doRun:调用$suite->run :
我们看下类PHPUnit_Framework_TestSuite,
构造函数中: 获得类名,获得所有的test函数。
看下$suite->run:
调用suite的$this->setUp(); 对于每个test,调用$test->runTest,调用suite的$this->tearDown();
看下$suite->runTest: 调用$test->run。
所有的case继承自类PHPUnit_Framework_TestCase。
这个里面的$backupGlobals 可以控制全局变量$GLOBALS的备份和恢复。布尔类型。有时候这个全局变量的备份和恢复可能会给较为复杂的框架的测试带来误解。可以选择关闭。
这里的run其实是调用:$result->run($this); 然后又调用了自己的$test->runBare();
看下$test->runBare(); :
默认是先备份GLOBALS变量。这个动作是在所有的操作之前的。调用setUp函数。调用$this->runTest(); 调用tearDown。恢复GLOBALS。
看下$this->runTest(); :
得到函数名称,调用test函数
看下PHPUnit_Framework_TestResult的run:
加载了xdebug,如果设置了$useXdebug ,启动code coverage。调用$test->runBare(); 结束code coverage统计。
几个主要的类的关系: