我有一个单元测试用PDOStatement::execute()
调用date()
作为数组元素之一。
类似的东西:
$stmt->execute(array ('value1', 'value2', date('Ymd'));
问题是我的断言是使用$this->anything()
来表示日期函数结果。我认为它已经破裂了,因为它在阵列中。有没有办法处理这个问题?
我的断言看起来像:
$mock->expects($this->once())
->method('execute')
->with(array ('value1', 'value2', $this->anything()));
答案 0 :(得分:3)
您无法将参数验证方法传递给数组中的with()
。 PHPUnit需要迭代数组并检测方法。相反,其中一个方法将传递给方法应接收的每个参数的with()
方法。
在您的情况下,该方法将收到一个参数,因此您将使用单个验证。您无法使用通用验证,因此您将使用回调检查阵列内部:
$mock->expects($this->once())
->method('execute')
->with($this->callback(function($array) {
return 'value1' == $array[0] && 'value2' == $array[1] && 3 == count($array);
}));
PHPUnit docs中解释了这一点。