也许我错过了一个细节,但我为单例_clone方法编写了一个小测试用例,但它没有在代码覆盖率报告中显示出来。
/**
* @covers ErrorHandling::__clone
*/
public function test__cloneNotCloneable(){
$class = new ReflectionClass('ErrorHandling');
$method = $class->getMethod('__clone');
self::assertTrue($method->isFinal(), '__clone method is not final.');
self::assertTrue($method->isPrivate(), '__clone method is not private.');
}
__clone方法是常规(邪恶)单例的常用私有/最终__clone()。
/**
* Define __clone as final and private to dissallow cloning.
*/
private final function __clone(){}
我知道这可能是针对此的过度测试,但代码覆盖率报告是一种“做得好”的工作的图形表示。有没有办法在代码覆盖率报告中标记这个方法?
答案 0 :(得分:13)
@covers
标记告诉PHPUnit你打算来测试命名方法; 不将方法标记为已经过测试。由于您无法调用该方法,因此Xdebug不会告诉PHPUnit其代码已被执行,并且它将永远不会在您的报告中涵盖。
最好的办法是告诉PHPUnit使用@codeCoverageIgnore
docblock标记忽略报告中的方法。
/**
* Define __clone as final and private to dissallow cloning.
*
* @codeCoverageIgnore
*/
private final function __clone() { }
您可以通过将它们包含在一对单行开始/结束注释中来忽略任何范围的行。
// @codeCoverageIgnoreStart
private final function __clone() { }
// @codeCoverageIgnoreEnd
最后,您可以通过向其添加单行注释来忽略单行。
private final function __clone() { } // @codeCoverageIgnore