我的测试用例如下:
class FooTest extends PHPUnit_Framework_TestCase {
/** @covers MyClass::bar */
function testBar()
{
$result = MyClass::bar();
$this->assertSomething($result);
}
}
现在,测试本身运行得很好,但代码覆盖率抱怨:
PHP_CodeCoverage_Exception: Trying to @cover not existing method "MyClass::bar *//**".
有任何想法吗?
解决方法:
更正
这个问题不在PHPUnit中,而是在PHP_CodeCoverage中.解析逻辑在某种程度上是重复的,PHPUnit修复(见下文)在这种情况下没有帮助.
修复3.6的修补程序是:
diff --git a/PHP/CodeCoverage/Util.PHP b/PHP/CodeCoverage/Util.PHP
index f90220d..54ce44b 100644
--- a/PHP/CodeCoverage/Util.PHP
+++ b/PHP/CodeCoverage/Util.PHP
@@ -196,12 +196,12 @@ class PHP_CodeCoverage_Util
} catch (ReflectionException $e) {
return array();
}
- $docComment = $class->getDocComment() . $method->getDocComment();
+ $docComment = substr($class->getDocComment(), 3, -2) . PHP_EOL . substr($method->getDocComment(), 3, -2);
foreach (self::$templateMethods as $templateMethod) {
if ($class->hasMethod($templateMethod)) {
$reflector = $class->getmethod($templateMethod);
- $docComment .= $reflector->getDocComment();
+ $docComment .= substr($reflector->getDocComment(), 3, -2);
unset($reflector);
}
}
我在https://github.com/sebastianbergmann/php-code-coverage/issues/121
开了一张票.
在发布此修复程序之前(很有可能只发生在PHPUnit 3.7中),您需要使用三个内核.
旧答案:
旧版本的PHPUnit不适用于一行注释.
PHPUnit试图找到一个名为“MyClass :: bar * // **”的类/方法组合
使用三行注释适用于所有版本
/**
* @covers MyClass::bar
*/
我修复了这个PHPUnit 3.6.4.
从PHPUnit> = 3.6.4,您的代码应该可以正常工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。