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

时间:2014-12-22 15:14:55

标签: php unit-testing phpunit

我正在学习如何使用PHPUnit 4.3.5 / PHP 5.5.14进行单元测试。一切顺利,直到我试图获得我的代码覆盖率。我收到了这个错误:"尝试@cover或@use not not existing method" MyClass :: __ construct"当试图获得代码覆盖率。我尝试了其他SO答案,但无法修复它。我有什么想法,我做错了什么?谢谢!

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

2 个答案:

答案 0 :(得分: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
    }
}

如果您按CTRL并单击它,PHPStorm等智能IDE会解决ClassToTest::someMethod()注释,但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
    }
}

答案 1 :(得分:9)

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

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

\MyClass
\MyNamespace\MyClass