带有数组和 $this->anything() 的 PHPUnit "with" 匹配器
PHPUnit "with" matcher with array and $this->anything()
我有一个单元测试测试 PDOStatement::execute()
调用,其中 date()
作为数组元素之一。
类似于:
$stmt->execute(array ('value1', 'value2', date('Ymd'));
问题是我的断言是使用 $this->anything()
来表示该日期函数结果。我认为它正在崩溃,因为它在一个数组中。有什么好的方法来处理吗?
我的断言如下:
$mock->expects($this->once())
->method('execute')
->with(array ('value1', 'value2', $this->anything()));
您不能将参数验证方法传递给数组内的 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 中有解释。
我有一个单元测试测试 PDOStatement::execute()
调用,其中 date()
作为数组元素之一。
类似于:
$stmt->execute(array ('value1', 'value2', date('Ymd'));
问题是我的断言是使用 $this->anything()
来表示该日期函数结果。我认为它正在崩溃,因为它在一个数组中。有什么好的方法来处理吗?
我的断言如下:
$mock->expects($this->once())
->method('execute')
->with(array ('value1', 'value2', $this->anything()));
您不能将参数验证方法传递给数组内的 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 中有解释。