是否可以模拟通过属性链接的方法?

时间:2018-09-27 14:40:40

标签: php mocking phpunit

我有以下PHP函数,为此我正在尝试编写一个PHPUnit测试:

public function getDisplayMode()
{
    if($this->request->query->get('master_video'))
    {
        return 'listTranslations';
    }
    else
    {
        return 'default';
    }
}

$this->request->query->get('master_video')行是我遇到的麻烦。

我已经模拟了request对象,所以如果它只是$this->request->get('master_video'),我可以轻松地使用method方法告诉系统{{1}应该返回什么}。

但是,当假定存在get属性时,我不知道该怎么做。 (例如,我不知道模拟对象上有任何query方法。)

这里是否可以定义property方法应返回的内容?

1 个答案:

答案 0 :(得分:1)

创建var data = "cheese,mozarella", dataarray = data.split(","), selectElement = document.getElementById('basic'); // clear select first clearSelect(selectElement); for (var i = 0; i < dataarray.length; i++) { prepopulateOptions(selectElement, dataarray[i]); } 的模拟并指定在query上发生的事情。测试最终看起来像这样:

->get()

作为一般规则,我发现在执行这样的操作时,我有一个模拟对象,该模拟对象返回的是代码味道的模拟对象。您的方法不需要$ this-> request,它需要查询对象。您应该将此直接提供给对象,或将其传递给此方法。

在不了解您要上的课的情况下,我无法提供更多建议。

如果难以编写测试内容,则表明您没有对代码进行最佳设计。