我很困惑为什么我的部分测试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,就好像它不是部分模拟一样。如果未设置任何期望,部分模拟应该服从模拟类中的方法,那么为什么不调用我的方法?
答案 0 :(得分:0)
创建模拟时必须使用shouldAllowMockingProtectedMethods
。这样可以解决您看不到输出的问题。