-1

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

1 回答 1

1

我真正关心的是传递给 parent::where() 的值是什么

不,你没有。这是单元测试根本不需要关心的实现细节。放轻松。

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

于 2013-06-22T02:05:11.070 回答