Учитывая следующий класс:
<?php
class Example {
private $Other;
public function __construct ($Other)
{
$this->Other = $Other;
}
public function query ()
{
$params = array(
'key1' => 'Value 1'
, 'key2' => 'Value 2'
);
$this->Other->post($params);
}
}
И этот тест:
<?php
require_once 'Example.php';
require_once 'PHPUnit/Framework.php';
class ExampleTest extends PHPUnit_Framework_TestCase {
public function test_query_key1_value ()
{
$Mock = $this->getMock('Other', array('post'));
$Mock->expects($this->once())
->method('post')
->with(YOUR_IDEA_HERE);
$Example = new Example($Mock);
$Example->query();
}
Как проверить, что $params
(который является массивом) и передан в $Other->post()
, содержит ключ с именем "key1", который имеет значение "Значение 1"?
Я не хочу проверять весь массив - это всего лишь пример кода, в реальном коде переданный массив имеет намного больше значений, я хочу проверить только одну пару ключ/значение.
Существует $this->arrayHasKey('keyname')
, который я могу использовать для проверки наличия ключа.
Существует также $this->contains('Value 1')
, который может использоваться для проверки того, что массив имеет это значение.
Я мог бы даже объединить эти два с $this->logicalAnd
. Но это, конечно, не дает желаемого результата.
До сих пор я использовал returnCallback, захватывая целые $params, а затем делал утверждения по этому поводу, но есть ли другой способ сделать то, что я хочу?