gpt4 book ai didi

phpunit - @covers 标签不工作

转载 作者:可可西里 更新时间:2023-10-31 22:12:09 25 4
gpt4 key购买 nike

也许我错过了一个细节,但我为单例 _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 方法是常规(邪恶)单例的常用私有(private)/最终 __clone()。

  /**
* Define __clone as final and private to dissallow cloning.
*/
private final function __clone(){}

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

最佳答案

@covers 标签告诉 PHPUnit 您打算测试指定的方法;它将该方法标记为已经过测试。由于您无法调用该方法,Xdebug 不会告诉 PHPUnit 它的代码已被执行,并且它永远不会包含在您的报告中。

最好的办法是使用 @codeCoverageIgnore 文档 block 标记告诉 PHPUnit 忽略报告中的方法。

/**
* 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

关于phpunit - @covers 标签不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com