3

我的测试用例如下所示:

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

有任何想法吗?

4

2 回答 2

4

另一个原因(这就是我的原因)是没有使用完整的类名,包括命名空间。

// Should be like
@covers \Vendor\Module\MyClass::doSomething
于 2014-09-01T05:03:30.537 回答
3

更正

问题不在于 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

Issue 328

PHPUnit >= 3.6.4您的代码中应该可以正常工作。

于 2012-09-27T17:11:55.413 回答