CL2*_*L22 5 php phpunit constraints hamcrest mockery
我如何使用嘲讽和and讽来断言,当调用模拟对象的方法时,传递给它的参数之一是包含键/值对的数组?
例如,我的测试代码可能如下所示:
$mock = m::mock('\Jodes\MyClass');
$mock ->shouldReceive('myMethod')
->once()
->with(
arrayContainsPair('my_key', 'my_value')
);
Run Code Online (Sandbox Code Playgroud)
我知道我可以用闭包形式编写它,但是我只是想知道是否还有另一种方法可以使它读起来更好:
$mock ->shouldReceive('myMethod')
->once()
->with(
m::on(function($options){
return
is_array($options) &&
isset($options['my_key']) &&
$options['my_key'] == 'my_val';
})
);
Run Code Online (Sandbox Code Playgroud)
我通过查看Hamcrest PHP 代码找到了答案,
函数名称在文档注释中给出:
* @factory hasEntry
Run Code Online (Sandbox Code Playgroud)
所以我的代码将如下所示:
$mock ->shouldReceive('myMethod')
->once()
->with(
hasEntry('my_key', 'my_value')
);
Run Code Online (Sandbox Code Playgroud)