无法测试引用模拟方法PHPUnit的方法

时间:2018-05-08 02:03:57

标签: php mocking phpunit stub

我正在使用模拟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/"
        }
    }
}

1 个答案:

答案 0 :(得分:0)

没有理由嘲笑你正在测试的课程。模拟用于避免来自另一个对象或类的复杂,风险或昂贵的函数调用,您知道响应,和/或您在另一个类中测试它。

对于单元测试,您应该将应用程序置于可以测试所需方案的状态。

所以,你可以做类似

的事情
public function testIsRecommended_With5_ReturnsTrue()
{
    $game = new Game;
    $game->addScore(10);
    $game->addScore(0); //average score 5
    $this->assertTrue($game->isRecommended()); //5 > 3
}