PHPUnit:尝试@cover或@use不是现有的方法

MrT*_*kos 8 php phpunit unit-testing

我正在学习如何使用PHPUnit 4.3.5/PHP 5.5.14进行单元测试.一切顺利,直到我试图获得我的代码覆盖率.我收到这个错误:"尝试@cover或@use不存在的方法"MyClass :: __构造"当试图获得代码覆盖时.我尝试了其他SO答案但无法解决它.任何想法我做错了什么? 谢谢!

/**
 * Test constructor.
 * @covers MyClass::__construct
 * @group MyClassTest
 */
public function test_Can_Create_MyClass_Instance() {
    $this->assertInstanceOf('MyClass', $this->_myClass);
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*ula 14

如果希望@covers注释与命名空间使用运算符一起使用,则可能会出现相同的错误.

以下代码不起作用:

<?php

namespace MyCompany\MyBundle\Test\UnitTest\Service;

use MyCompany\MyBundle\Service\ClassToTest;

class MyAwesomeTest
{
    /**
     * @covers ClassToTest::someMethod()
     */
    public function testSomeMethod()
    {
        // do your magic
    }
}
Run Code Online (Sandbox Code Playgroud)

像PHPStorm这样的智能IDE ClassToTest::someMethod()如果你用CTRL +点击它就可以解决注释,但是PHPUnit会给你一个Trying to @cover or @use not existing method "ClassToTest::someMethod".错误.

这里有拉取请求:https://github.com/sebastianbergmann/phpunit/pull/1312

作为一种解决方法,只需使用完整的类名:

<?php

namespace MyCompany\MyBundle\Test\UnitTest\Service;

use MyCompany\MyBundle\Service\ClassToTest;

class MyAwesomeTest
{
    /**
     * @covers \MyCompany\MyBundle\Service\ClassToTest::someMethod()
     */
    public function testSomeMethod()
    {
        // do your magic
    }
}
Run Code Online (Sandbox Code Playgroud)


gon*_*lez 9

如果您的类确实实现了该__construct方法,那么问题是找不到类本身.开始删除@covers注释,并检查是否可以加载该类.例如,尝试:var_dump(class_exists('MyClass'));在测试内部(在我认为不会通过的断言之前).

在注释中,通常在将类名作为字符串传递时,应始终使用其完整的命名空间名称引用该类:

\MyClass
\MyNamespace\MyClass
Run Code Online (Sandbox Code Playgroud)