无法测试引用模拟方法 PHPUnit 的方法
Cannot test a method that reference to mocking method PHPUnit
我正在使用模拟 PHPUnit 为我的代码创建模拟测试。
但是当我创建一个由 class 中的另一个方法 (B) 调用的模拟方法 (A) 时,方法 B 不是我想要的 return - 它总是 return null.
我的class:
public function isRecommended()
{
return $this->getAverageScore() >= 3;
}
public function getAverageScore()
{
// do something
}
我的测试:
public function testIsRecommended_With5_ReturnsTrue()
{
$game = $this->createMock(Game::class);
$game->method('getAverageScore')->willReturn(5); //mocking return 5
$this->assertTrue($game->isRecommended());
}
错误:
1) Src\Tests\Unit\GameTest::testIsRecommended_With5_ReturnsTrue
Failed asserting that null is true.
composer.json
{
"require": {
"phpunit/phpunit": "^7.1",
"phpunit/phpunit-mock-objects": "^6.1"
},
"autoload": {
"psr-4": {
"Src\": "src/",
"Tests\": "tests/"
}
}
}
没有理由模拟您正在测试的 class。 Mock 用于避免来自另一个对象或 class 的复杂、风险或昂贵的函数调用,你有一个已知的响应,and/or 你在另一个 class.
中测试它
对于单元测试,您应该将应用程序置于可以测试所需场景的状态。
所以,你可以做类似的事情
public function testIsRecommended_With5_ReturnsTrue()
{
$game = new Game;
$game->addScore(10);
$game->addScore(0); //average score 5
$this->assertTrue($game->isRecommended()); //5 > 3
}
我正在使用模拟 PHPUnit 为我的代码创建模拟测试。 但是当我创建一个由 class 中的另一个方法 (B) 调用的模拟方法 (A) 时,方法 B 不是我想要的 return - 它总是 return null.
我的class:
public function isRecommended()
{
return $this->getAverageScore() >= 3;
}
public function getAverageScore()
{
// do something
}
我的测试:
public function testIsRecommended_With5_ReturnsTrue()
{
$game = $this->createMock(Game::class);
$game->method('getAverageScore')->willReturn(5); //mocking return 5
$this->assertTrue($game->isRecommended());
}
错误:
1) Src\Tests\Unit\GameTest::testIsRecommended_With5_ReturnsTrue
Failed asserting that null is true.
composer.json
{
"require": {
"phpunit/phpunit": "^7.1",
"phpunit/phpunit-mock-objects": "^6.1"
},
"autoload": {
"psr-4": {
"Src\": "src/",
"Tests\": "tests/"
}
}
}
没有理由模拟您正在测试的 class。 Mock 用于避免来自另一个对象或 class 的复杂、风险或昂贵的函数调用,你有一个已知的响应,and/or 你在另一个 class.
中测试它对于单元测试,您应该将应用程序置于可以测试所需场景的状态。
所以,你可以做类似的事情
public function testIsRecommended_With5_ReturnsTrue()
{
$game = new Game;
$game->addScore(10);
$game->addScore(0); //average score 5
$this->assertTrue($game->isRecommended()); //5 > 3
}