phpunit - @covers标签无效

时间:2011-05-19 06:38:45

标签: php phpunit

也许我错过了一个细节,但我为单例_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(){}

我知道这可能是针对此的过度测试,但代码覆盖率报告是一种“做得好”的工作的图形表示。有没有办法在代码覆盖率报告中标记这个方法?

1 个答案:

答案 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