我正在学习phpunit,我注意到当我的断言失败时,摘要需要大量时间来显示结果(但不是当测试正确时)。
例如,如果我运行这个测试,它需要半秒钟来显示绿色条:
<?php
class SomeTest extends PHPUnit_Framework_TestCase {
public function testSomething() {
$this->assertTrue(true);
}
}
?>
但是同样的带有失败断言的测试需要12秒才能显示红色条:
<?php
class SomeTest extends PHPUnit_Framework_TestCase {
public function testSomething() {
$this->assertTrue(false);
}
}
?>
现在,如果我需要在开发过程中连续运行测试,这个时间是不可接受的。我怎样才能加快这个过程呢?
自从我在windows 7盒子上升级到php 5.4/phpunit 3.7.24以来,我遇到了同样的问题。我调试后发现PHPUnit_Util_GlobalState#phpunitFiles()是罪魁祸首,它花了大约7秒的时间找到PHPUnit和PEAR文件,从堆栈跟踪中过滤出来。
我提交了一个问题:https://github.com/sebastianbergmann/phpunit/issues/1007
目前作为一种解决方法,我将尝试将文件数组缓存到磁盘
public static function phpunitFiles()
{
if (self::$phpunitFiles === NULL) {
$phpunitFilesCache = '/path/to/my/file/phpunitFiles'; // CHANGED
if (is_file($phpunitFilesCache)) { // CHANGED
self::$phpunitFiles = unserialize(file_get_contents($phpunitFilesCache)); // CHANGED
return self::$phpunitFiles; // CHANGED
} // CHANGED
self::addDirectoryContainingClassToPHPUnitFilesList('File_Iterator');
self::addDirectoryContainingClassToPHPUnitFilesList('PHP_CodeCoverage');
self::addDirectoryContainingClassToPHPUnitFilesList('PHP_Invoker');
self::addDirectoryContainingClassToPHPUnitFilesList('PHP_Timer');
self::addDirectoryContainingClassToPHPUnitFilesList('PHP_Token');
self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Framework_TestCase', 2);
self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Extensions_Database_TestCase', 2);
self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Framework_MockObject_Generator', 2);
self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Extensions_SeleniumTestCase', 2);
self::addDirectoryContainingClassToPHPUnitFilesList('PHPUnit_Extensions_Story_TestCase', 2);
self::addDirectoryContainingClassToPHPUnitFilesList('Text_Template');
file_put_contents($phpunitFilesCache, serialize(self::$phpunitFiles)); // CHANGED
}
return self::$phpunitFiles;
}