我很困惑为什么我的部分测试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,就好像它不是部分模拟一样。如果没有设置期望,部分模拟应该遵循模拟类中的方法,那么为什么我的方法不被调用?
创建模拟时必须使用shouldAllowMockingProtectedMethods
。这将解决您没有看到输出的问题。