phpunit - @covers标签无效

ste*_*lin 11 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.');
 }
Run Code Online (Sandbox Code Playgroud)

__clone方法是常规(邪恶)单例的常用私有/最终__clone().

  /**
   *  Define __clone as final and private to dissallow cloning.
   */
   private final function  __clone(){}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*ess 14

@covers标签告诉你PHPUnit的打算测试命名的方法; 它并没有标记方法为已被测试.由于您无法调用该方法,因此Xdebug不会告诉PHPUnit其代码已被执行,并且它将永远不会包含在您的报告中.

最好的办法是告诉PHPUnit使用@codeCoverageIgnoredocblock标记忽略报告中的方法.

/**
 * Define __clone as final and private to dissallow cloning.
 *
 * @codeCoverageIgnore
 */
private final function __clone() { }
Run Code Online (Sandbox Code Playgroud)

您可以通过将它们包含在一对单行开始/结束注释中来忽略任何范围的行.

// @codeCoverageIgnoreStart
private final function __clone() { }
// @codeCoverageIgnoreEnd
Run Code Online (Sandbox Code Playgroud)

最后,您可以通过向其添加单行注释来忽略单行.

private final function __clone() { }  // @codeCoverageIgnore
Run Code Online (Sandbox Code Playgroud)