PHP Mockery部分测试双重不从父类调用方法

问题描述 投票:1回答:1

我很困惑为什么我的部分测试double没有正确调用方法。这些是我的课程:

abstract class Model
{
    public function update(array $attributes) {
        $this->performUpdate($attributes);
    }

    abstract protected function performUpdate(array $attributes);
}

class Product extends Model
{
    protected function performUpdate(array $attributes)
    {
        print_r($attributes);
    }
}

$mock = Mockery::mock(Product::class)->makePartial();

$mock->update([]); // the 'performUpdate' method never gets called

当代码运行时,performUpdate类中的Product永远不会被调用。 'update'方法按预期调用,但从不调用真正的performUpdate方法。相反,它只返回null,就好像它不是部分模拟一样。如果没有设置期望,部分模拟应该遵循模拟类中的方法,那么为什么我的方法不被调用?

php unit-testing mockery
1个回答
0
投票

创建模拟时必须使用shouldAllowMockingProtectedMethods。这将解决您没有看到输出的问题。

© www.soinside.com 2019 - 2024. All rights reserved.