Насмешка: проверить, является ли аргумент массивом, содержащим пару ключ / значение

Как я могу использовать mockery и hamcrest, чтобы утверждать, что когда вызывается метод фиктивного объекта, один из переданных ему аргументов — это массив, содержащий пару ключ / значение?

Например, мой тестовый код может выглядеть так:

$mock = m::mock('\Jodes\MyClass');

$mock   ->shouldReceive('myMethod')
->once()
->with(
arrayContainsPair('my_key', 'my_value')
);

Я знаю, что мог бы написать это с закрытием, но мне было просто интересно, есть ли другой способ сделать его немного лучше:

$mock   ->shouldReceive('myMethod')
->once()
->with(
m::on(function($options){
return
is_array($options) &&
isset($options['my_key']) &&
$options['my_key'] == 'my_val';
})
);

4

Решение

Я нашел ответ, просматривая PHP-код Hamcrest здесь,

Имя функции указывается в комментарии к документу:

 * @factory hasEntry

Так что мой код будет выглядеть так:

$mock   ->shouldReceive('myMethod')
->once()
->with(
hasEntry('my_key', 'my_value')
);
3

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

Если вы заинтересованы в другом решении, вы можете проверить Узо издевается.

Просто вы можете сделать это:

//creating mock
$mock = Mock::create('MockTestClass');

//call mock
$mock->test(['key1' => 'value1', 'key2' => 'value2']);

//asserts (verification)
Mock::verify($mock)->test(Mock::argThat()->extractField('key1')->equals('value1'));
Mock::verify($mock)->test(Mock::argThat()->extractField('key2')->equals('value2'));
2

По вопросам рекламы [email protected]