我有一个重载where
函数的模型。
我的重载方法如下所示:
public function where($column, $operator = null, $value = null, $boolean = 'and')
{
if (in_array($column, $this->metaFields))
{
$value = '%"' . $column . '":"' . $value . '"';
$column = 'meta';
$operator = 'like';
}
return parent::where($column, $operator, $value, $boolean);
}
现在使用phpunit和mockery我正在尝试测试这个类,我需要测试我的重载where函数,我真正关心的是传递给parent::where()
的值是什么
我的问题是,是否有可能/如何模拟父类,以便我可以
$metaField = 'colour';
$value = 'blue';
//on the parent
->shouldReceive('where')->with(['meta', 'like', '%"colour":"blue"%'])->once();
//on the model I am testing
$model->where('colour', 'blue');
答案 0 :(得分:1)
所有我真正关心的是传递给parent :: where()
的值
不,你没有。这是一个实现细节,您根本不需要关心单元测试。放松一下吧。
编辑:这不是开玩笑,但是如果你的设计需要这个,你应该赞成组合而不是继承,这样你就可以实际模拟那个“父”并注入它,因此测试这样的期望。根据定义,mock中的mock的父类是类,因此在这种情况下,父类是具有重载方法的类,而不是它的父类。你不能用嘲弄模仿“父母”(而不是我知道的任何其他PHP模拟库)。