【发布时间】:2018-05-08 02:03:56
【问题描述】:
我正在使用模拟 PHPUnit 为我的代码创建模拟测试。 但是当我在类中创建一个由另一个方法(B)调用的模拟方法(A)时,方法 B 不会返回我想要的 - 它总是返回 null。
我的班级:
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/"
}
}
}
【问题讨论】:
-
为了更好地理解代码,请避免使用“幻数”,3, 5, ... 改用常量,例如
const MINIMUM_RECOMMENDED_RATE = 3 -
@FelippeDuarte 是的,我会在一切正常后重构它。