модульное тестирование — Как сделать hasKeys () в PHP Mockery или создать ожидания пользовательских параметров?

У насмешек есть метод hasKey (), который проверяет, есть ли у данного параметра определенный ключ. Я хочу убедиться, что переданный массив имеет несколько ключей. Я также хотел бы утверждать, что массив имеет х количество элементов.

Есть ли встроенный способ учесть ожидания пользовательских параметров? Я попытался использовать замыкание, которое возвращает истину или ложь на основе заданного параметра, но это не сработало.

Благодарю.

Редактировать:

пример

$obj = m::mock('MyClass');
$obj->shouldReceive('method')->once()->with(m::hasKey('mykeyname'));

Я пытаюсь понять, что передается методу с помощью with(), Я хочу утверждать, что массив, переданный методу, имеет оба ключа a И ключ b, Было бы здорово, если бы я мог как-то использовать замыкание для создания собственного утверждения, такого как подсчет количества элементов массива.

2

Решение

Вы можете использовать пользовательские совпадения.

Для моей головы (не проверено) это может выглядеть примерно так:

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector