nik*_*org 35 php testing phpunit code-coverage
我一直在为一个项目创建一个测试套件,虽然我意识到100%的覆盖率并不是人们应该努力的指标,但在代码覆盖率报告中有一点奇怪,我想要一些澄清.
看截图:

因为正在测试的方法的最后一行是a return,所以最后一行(它只是一个结束括号)显示为从未执行,因此整个方法被标记为未在概述中执行.(要不然,或者我没有正确阅读报告.)
完整的方法:
static public function &getDomain($domain = null) {
$domain = $domain ?: self::domain();
if (! array_key_exists($domain, self::$domains)) {
self::$domains[$domain] = new Config();
}
return self::$domains[$domain];
}
Run Code Online (Sandbox Code Playgroud)
有这个原因,还是一个小故障?
(是的,我通读了如何使用PHPUnit获得100%的代码覆盖率,不同的情况虽然相似.)
编辑:
通过报告跋涉,我注意到switch代码中其他地方的陈述也是如此.所以这种行为至少在某种程度上是一致的,但对我来说却令人困惑.
EDIT2:
我正在运行:OS X上的PHPUnit 3.6.7,PHP 5.4.0RC5,XDebug 2.2.0-dev
edo*_*ian 36
第一关:100%的代码覆盖率是一个重要指标,以争取为.通过精力充沛的努力并不总是可以实现,这并不总是很重要:)
对于简单的情况,xDebug可以告诉该行无法访问,因此您可以获得100%的代码覆盖率.
请参阅下面的简单示例.
现在问题已得到解决,xDebug bugtracker因此构建新版本的xDebug将解决这些问题:)
由于您运行的是PHP 5.4和xDebug的DEV版本,我已经安装了这些并进行了测试.我使用您评论过的相同输出遇到了与您相同的问题.
如果问题来自php-code-coverage(phpunit模块)xDebug,我不是100%肯定.它也可能是xDebug开发的问题.
我已经提交了一个错误,php-code-coverage我们将找出问题的来源.
对于更复杂的情况下,这CAN失败.
对于您展示的代码我可以说的是"它适用于我"(下面的复杂示例).
我已经看到它与当前版本失败但它取决于整个班级有时看起来如何.
删除?:运算符和其他单行多语句的东西也可能有所帮助.
据我所知,xDebug中正在进行重构以避免更多这些情况.xDebug曾经希望能够提供"声明覆盖",并且应该修复很多这样的情况.目前在这里没有什么可以做的
虽然//@codeCoverageIgnoreStart并且//@codeCoverageIgnoreEnd将这条线"覆盖"但它看起来非常丑陋并且通常做得比坏更好.
对于发生这种情况的另一种情况,请参阅以下问题和答案:
what-to-do-when-project-coding-standards-conflicts-with-unit-test-code-coverage
<?php
class FooTest extends PHPUnit_Framework_TestCase {
public function testBar() {
$x = new Foo();
$this->assertSame(1, $x->bar());
}
}
<?php
class Foo {
public function bar() {
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
生产:
phpunit --coverage-text mep.php
PHPUnit 3.6.7 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 3.50Mb
OK (1 test, 1 assertion)
Generating textual code coverage report, this may take a moment.
Code Coverage Report
2012-01-10 15:54:56
Summary:
Classes: 100.00% (2/2)
Methods: 100.00% (1/1)
Lines: 100.00% (1/1)
Foo
Methods: 100.00% ( 1/ 1) Lines: 100.00% ( 1/ 1)
Run Code Online (Sandbox Code Playgroud)
<?php
require __DIR__ . '/foo.php';
class FooTest extends PHPUnit_Framework_TestCase {
public function testBar() {
$this->assertSame('b', Foo::getDomain('a'));
$this->assertInstanceOf('Config', Foo::getDomain('foo'));
}
}
<?php
class Foo {
static $domains = array('a' => 'b');
static public function &getDomain($domain = null) {
$domain = $domain ?: self::domain();
if (! array_key_exists($domain, self::$domains)) {
self::$domains[$domain] = new Config();
}
return self::$domains[$domain];
}
}
class Config {}
Run Code Online (Sandbox Code Playgroud)
生产:
PHPUnit 3.6.7 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 3.50Mb
OK (1 test, 2 assertions)
Generating textual code coverage report, this may take a moment.
Code Coverage Report
2012-01-10 15:55:55
Summary:
Classes: 100.00% (2/2)
Methods: 100.00% (1/1)
Lines: 100.00% (5/5)
Foo
Methods: 100.00% ( 1/ 1) Lines: 100.00% ( 5/ 5)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12364 次 |
| 最近记录: |