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

时间:2019-03-05 04:19:43

标签: php unit-testing mockery

我很困惑为什么我的部分测试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,就好像它不是部分模拟一样。如果未设置任何期望,部分模拟应该服从模拟类中的方法,那么为什么不调用我的方法?

1 个答案:

答案 0 :(得分:0)

创建模拟时必须使用shouldAllowMockingProtectedMethods。这样可以解决您看不到输出的问题。