我的测试用例如下:
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.