gpt4 book ai didi

php - 如何在 PHP Mockery 中执行 hasKeys() 或创建自定义参数期望?

转载 作者:行者123 更新时间:2023-12-04 02:22:53 24 4
gpt4 key购买 nike

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));

关于php - 如何在 PHP Mockery 中执行 hasKeys() 或创建自定义参数期望?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26221546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com