【发布时间】:2014-07-25 18:34:03
【问题描述】:
我有以下课程:
class Foo
{
public function importBars(array $array)
{
foreach ($array as $key => $value) {
$this->importBar($key, $value);
}
}
public function importBar($key, $value)
{
// do stuff
}
}
我需要测试 importBar 是否被称为 count($array) 次,并且它是用正确的参数调用的。使用$this->at() 不是一个选项,因为$array 元素的顺序可能会改变。我有:
public function testImportBars(array $array)
{
// Mock invocation ...
$logicalOrs = array();
foreach ($array as $sku => $value) {
$logicalOrs[] = $this->logicalOr($this->equalTo($key), $this->equalTo($value));
}
$mock->expects($this->exactly(count($array)))
->method('importBar')
->with(call_user_func_array(array($this, 'logicalOr'), $logicalOrs));
}
通过测试。但是,当我故意让它失败时:
foreach ($array as $sku => $value) {
$logicalOrs[] = $this->logicalOr($this->equalTo($key), $this->equalTo(null));
}
...它仍然通过。仅当$key 不正确时才会失败:
foreach ($array as $sku => $value) {
$logicalOrs[] = $this->logicalOr($this->equalTo(null), $this->equalTo(null));
}
... 这表明 PHPUnit 只检查传递给 Foo::importBar() 的第一个参数是否正确。
当有多个方法的参数时,有没有办法告诉 PHPUnit 验证方法的参数?
【问题讨论】:
标签: phpunit