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)
如果您的类确实实现了该__construct方法,那么问题是找不到类本身.开始删除@covers注释,并检查是否可以加载该类.例如,尝试:var_dump(class_exists('MyClass'));在测试内部(在我认为不会通过的断言之前).
在注释中,通常在将类名作为字符串传递时,应始终使用其完整的命名空间名称引用该类:
\MyClass
\MyNamespace\MyClass
Run Code Online (Sandbox Code Playgroud)