我需要测试一个用 ZF2 编写的大型网站。有 443 个测试和大约 10000 个断言。代码覆盖率测试需要 6 个小时!我想我发现了问题:在控制器的测试中,我使用了 AbstractHttpControllerTestCase 的调度方法。每次测试后,调度方法的执行时间都会增加(从几分之一秒到几十秒)。
我使用 ZF 2.1.3、PHPUnit 3.7、PHP_CodeCoverage 1.2、Xdebug v2.2.1、PHP 5.4.7。
我的调度方法:
public function dispatch($url, $method = HttpRequest::METHOD_GET, $params = array())
{
$s = microtime(true);
parent::dispatch($url, $method, $params);
$end = microtime(true) - $s;
echo 'dis: '.$end."\n";
return $this->getApplication()->getMvcEvent()->getResult();
}
parent::dispatch 是来自 AbstractHttpControllerTestCase 的方法。
测试样本:
$result = $this->dispatch('/archive/finance/older');
$this->assertControllerName('skycontent\controller\article');
$this->assertActionName('archive');
$this->assertParamValue('older', true);
$this->assertParamValue('category', 'finance');
$vars = (array) $result->getVariables();
$this->assertArrayHasKey('archivePosts', $vars);
请帮忙。谢谢。
更新:
我使用进程隔离并在大约 15 分钟内完成测试(没有代码覆盖),但在测试中出现错误,标记为已跳过:
PHPUnit_Framework_Exception: PHP Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'Closure' is not allowed' in -:44