【发布时间】:2018-01-19 07:10:08
【问题描述】:
我有一个类 getPaginatedQuery,它的第一步会立即克隆它的一个参数:
public function getPaginatedQuery(Builder $query, $limit = null, $offset = null)
{
$constrainedQuery = clone $query;
...
}
Builder 对象的克隆是通过其__clone 魔术方法完成的。
我正在尝试通过为$query 传递一个模拟的Builder 实例来对该方法进行单元测试:
$query = m::mock('Illuminate\Database\Eloquent\Builder');
$relation->getPaginatedQuery($query, 2, 1);
我的测试因致命错误而失败:__clone method called on non-object。我尝试在我的 $query 对象上定义对 __clone 的期望,但我得到了同样的错误:
$query = m::mock('Illuminate\Database\Eloquent\Builder');
$clonedQuery = m::mock('Illuminate\Database\Eloquent\Builder');
$query->shouldReceive('__clone')->andReturn($clonedQuery);
$relation->getPaginatedQuery($query, 2, 1);
我在这里做错了什么?
【问题讨论】:
标签: php unit-testing mocking clone mockery