测试一个调用parent :: function的类?

时间:2013-06-22 01:53:11

标签: php inheritance phpunit laravel-4 mockery

我有一个重载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');

1 个答案:

答案 0 :(得分:1)

  

所有我真正关心的是传递给parent :: where()

的值

不,你没有。这是一个实现细节,您根本不需要关心单元测试。放松一下吧。

编辑:这不是开玩笑,但是如果你的设计需要这个,你应该赞成组合而不是继承,这样你就可以实际模拟那个“父”并注入它,因此测试这样的期望。根据定义,mock中的mock的父类是类,因此在这种情况下,父类是具有重载方法的类,而不是它的父类。你不能用嘲弄模仿“父母”(而不是我知道的任何其他PHP模拟库)。