Mockery有一个方法hasKey(),它检查给定参数是否有某个键。我想确保传递的数组有多个键。我还想断言这个数组有x个元素。
是否有一种内置的方式来允许自定义参数期望值?我尝试使用一个根据给定参数返回true或false的闭包,但没有成功。
谢谢。
编辑:
示例
$obj = m::mock('MyClass');
$obj->shouldReceive('method')->once()->with(m::hasKey('mykeyname'));
我试图做的是对使用with()
传递给方法的内容有更多的了解。我想断言传递给方法的数组同时具有关键字a
和关键字b
。如果我能以某种方式使用闭包来创建自己的断言,比如计算数组元素的数量,那就太好了。
您可以使用自定义匹配器。
在我的脑海中(未经测试),这可能看起来像这样:
class HasKeysMatcher extends 'Mockery'Matcher'MatcherAbstract
{
protected $expectedNumberOfElements;
public function __construct($expectedKeys, $expectedNumberOfElements)
{
parent::__construct($expectedKeys);
$this->expectedNumberOfElements =$expectedNumberOfElements;
}
public function match(&$actual)
{
foreach($this->_expected as $expectedKey){
if (!array_key_exists($expectedKey, $actual)){
return false;
}
}
return $this->expectedNumberOfElements==count($actual);
}
/**
* Return a string representation of this Matcher
*
* @return string
*/
public function __toString()
{
return '<HasKeys>';
}
}
然后像这样使用:
$obj = m::mock('MyClass');
$obj->shouldReceive('method')->once()->with(new HasKeysMatcher(array('key1','key2'),5));