在 PHPUnit docs中,它说可以获得代码覆盖率数据:
PHPUnit_Extensions_SeleniumTestCase 可以为通过 Selenium 运行的测试收集代码覆盖率信息:
将 PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php 复制到您的网络服务器的文档根目录中。
在您的网络服务器的 php.ini 配置文件中,将 PHPUnit/Extensions/SeleniumTestCase/prepend.php 和 PHPUnit/Extensions/SeleniumTestCase/append.php 分别配置为 auto_prepend_file 和 auto_append_file。
在扩展 PHPUnit_Extensions_SeleniumTestCase 的测试用例类中,使用 protected $coverageScriptUrl = 'http://host/phpunit_coverage.php'; 配置 phpunit_coverage.php 脚本的 URL。
我无法让它输出任何覆盖信息。我可以通过正常的单元测试获得代码覆盖率信息。
对于我运行的应用程序,http://localhost/ts2_templates/
我已复制phpunit_coverage.php
到http://localhost/phpunit_coverage.php
.
我在 php.ini 中添加了以下内容:
auto_prepend_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/prepend.php"
auto_append_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/append.php"
...并验证他们是用die("yep it's me");
.
最后,我在我的测试用例中添加了以下内容:
<?php
class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{
# added line below
protected $coverageScriptUrl = 'http://localhost/phpunit_coverage.php';
protected function setUp()
{
$this->setBrowser('firefox');
$this->setBrowserUrl('http://localhost/ts2_templates');
}
public function testTitle()
{
$this->url('http://localhost/ts2_templates');
$this->assertContains('test', $this->title());
}
}
?>
这是由 PHPStorm 生成的用于运行代码覆盖率测试的命令:
/Applications/MAMP/bin/php5.3/bin/php -dxdebug.coverage_enable=1 /private/var/folders/pp/0t4y41f95j5313qm_f8b42fw0000gn/T/ide-phpunit.php --coverage-clover /path/to/coverage/ts2_templates$WebTest.coverage --no-configuration WebTest /Users/Ian/php/ts2_templates/tests/WebTest.php
下面是覆盖 XML 文件的输出:
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1341015508">
<project timestamp="1341015508">
<metrics files="0" loc="0" ncloc="0" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
</project>
</coverage>
测试本身通过。
我已经验证代码中的任何地方都没有退出或死亡语句。
有任何想法吗?