首页 > 解决方案 > PHPUnit 9.5.2 中的方法模拟

问题描述

我是在 PHP 中模拟的新手,我似乎误解了一些东西,因为我无法让基础工作:


class Klass
{
    public function a(): string
    {
        return 'a';
    }
}

class MockTest extends \PHPUnit\Framework\TestCase
{
    function testA(): void
    {
        $klass = new Klass();

        $this->assertEquals('a', $klass->a());
    }

    function testMockA()
    {
        $mock = $this->getMockBuilder(Klass::class)->getMock();

        $mock->method('a')->willReturn('foo');

        $klass = new Klass();

        $this->assertSame('foo', $klass->a());
    }
}

测试 testMockA 失败,因为 $klass->a() 仍然返回 'a'。模拟似乎什么都不做?

我基于使用 Database Connection 的 PHPUnit Mocking 函数,我在其中使用了 TaskTest.php 上的内容:这就是我最终想要的,以模拟我的 Database 类以不进行实际查询,但我无法让它工作.

标签: mockingphpunit

解决方案


你需要打电话$mock->a()而不是$klass->a()。事实上,你甚至不应该创建$klass.


推荐阅读