PHPUnit 在模拟命名空间时发出警告 class
PHPUnit signals a warning when mocking a namespace-ed class
我的作曲家项目由 src
和 tests
文件夹组成。
src
中的代码是使用 composers psr4 自动加载器自动加载的
"autoload": {
"psr-4": {
"christmas\":"src/"
}
}
要测试的class看起来是这样
namespace christmas;
class Hello
{ //constructor & dependency injection included in real class
public function sayHello()
{
return "HELLO";
}
}
最后我的测试 class 看起来像这样
<?php
use PHPUnit\Framework\TestCase;
require_once('../vendor/autoload.php');
use christmas\Hello;
class TestHello extends TestCase
{
public function testSayHelloMethod()
{
$hello = $this->getMockBuilder('Hello')
->getMock();
$hello->expects($this->once())
->method('sayHello')
->will($this->returnValue('HELLO'));
$this->assertEquals(
"HELLO",
$hello->sayHello()
);
}
}
这是我的 运行 phpunit
phpunit tests/TestHello
phpunit 回显以下输出
Time: 45 ms, Memory: 4.00 MB
There was 1 warning:
1) tests\Hello::testSayHelloMethod()
Trying to configure method "sayHello" which cannot be configured because it does not exist, has not been specified, is final, or is static
/usr/share/php/PHPUnit/TextUI/TestRunner.php:641
/usr/share/php/PHPUnit/TextUI/Command.php:206
/usr/share/php/PHPUnit/TextUI/Command.php:162
WARNINGS!
Tests: 1, Assertions: 0, Warnings: 1.
下面是我的代码组织方式的视图,
├── composer.json
├── src
│ └── Hello.php
├── tests
│ └── TestHello.php
└── vendor
我错过了什么?我需要在没有任何警告的情况下通过测试。
您需要将 class 的完整命名空间名称传递给模拟生成器,即 'christmas\Hello'
。由于您需要将其作为字符串传递,仅使用 "Hello" 不足以正确识别 class。
因为您已经有了 class 的 use
,您可以使用 ::class
来获取全名。例如:
$hello = $this->getMockBuilder(Hello::class)
->getMock();
我的作曲家项目由 src
和 tests
文件夹组成。
src
中的代码是使用 composers psr4 自动加载器自动加载的
"autoload": {
"psr-4": {
"christmas\":"src/"
}
}
要测试的class看起来是这样
namespace christmas;
class Hello
{ //constructor & dependency injection included in real class
public function sayHello()
{
return "HELLO";
}
}
最后我的测试 class 看起来像这样
<?php
use PHPUnit\Framework\TestCase;
require_once('../vendor/autoload.php');
use christmas\Hello;
class TestHello extends TestCase
{
public function testSayHelloMethod()
{
$hello = $this->getMockBuilder('Hello')
->getMock();
$hello->expects($this->once())
->method('sayHello')
->will($this->returnValue('HELLO'));
$this->assertEquals(
"HELLO",
$hello->sayHello()
);
}
}
这是我的 运行 phpunit
phpunit tests/TestHello
phpunit 回显以下输出
Time: 45 ms, Memory: 4.00 MB
There was 1 warning:
1) tests\Hello::testSayHelloMethod()
Trying to configure method "sayHello" which cannot be configured because it does not exist, has not been specified, is final, or is static
/usr/share/php/PHPUnit/TextUI/TestRunner.php:641
/usr/share/php/PHPUnit/TextUI/Command.php:206
/usr/share/php/PHPUnit/TextUI/Command.php:162
WARNINGS!
Tests: 1, Assertions: 0, Warnings: 1.
下面是我的代码组织方式的视图,
├── composer.json
├── src
│ └── Hello.php
├── tests
│ └── TestHello.php
└── vendor
我错过了什么?我需要在没有任何警告的情况下通过测试。
您需要将 class 的完整命名空间名称传递给模拟生成器,即 'christmas\Hello'
。由于您需要将其作为字符串传递,仅使用 "Hello" 不足以正确识别 class。
因为您已经有了 class 的 use
,您可以使用 ::class
来获取全名。例如:
$hello = $this->getMockBuilder(Hello::class)
->getMock();