微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHPUnit – 尝试@cover不存在的方法

我的测试用例如下:

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.

Issue 328.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐