我写了一个基本上看起来像这样的方法:
public function collectData($input, FooInterface $foo) {
$data = array();
$data['products']['name'] = $this->some_method();
if(empty($input['bar'])) {
$data['products']['type'] = "Baz";
}
// hundreds of calls later
$foo->persist($data);
}
现在我想对该collectData
方法进行单元测试,以检查是否$data
为某些输入设置了值。对于对象参数,我通常会使用这样的模拟:
$mock = $this->getMock('FooInterface');
$mock->expects($this->once())
->method('persist')
->with($this->identicalTo($expectedObject));
但是我将如何测试某些嵌套数组键(例如,如果$data['products']['prices']['taxgroup']
是 1),而忽略数组中可能存在的所有其他键?PHPUnit 或 Mockery 是否提供此类检查?或者他们可以很容易地扩展以提供这样的检查吗?
还是做我现在正在做的事情更好:创建我自己的FooClassMock
类来实现FooInterface
并将数据存储在persist
调用中?