PHPUnit" with" matcher与数组和$ this->任何东西()

时间:2015-01-06 20:28:56

标签: php mocking phpunit

我有一个单元测试用PDOStatement::execute()调用date()作为数组元素之一。

类似的东西:

$stmt->execute(array ('value1', 'value2', date('Ymd'));

问题是我的断言是使用$this->anything()来表示日期函数结果。我认为它已经破裂了,因为它在阵列中。有没有办法处理这个问题?

我的断言看起来像:

$mock->expects($this->once())
  ->method('execute')
  ->with(array ('value1', 'value2', $this->anything()));

1 个答案:

答案 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中解释了这一点。