phpspec — указать, что аргументы должны передаваться фиктивному объекту

Я новичок в PHPSpec а также BDD / TDD в общем.

Учитывая следующий код:

interface Checker
{
public function execute(array $args = array());
}

class Check
{
public $checker;

public $params = array();

public function doCheck()
{
}
}

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

Мой Spec:

class CheckSpec extends ObjectBehavior
{
function it_should_pass_params_to_checker_on_execute(\Checker $checker)
{
$checker->execute()->willReturn(true);
$this->checker = $checker;
$this->params = array(1,2);
$this->doCheck();
$checker->execute(array(1,2))->shouldHaveBeenCalled();
}
}

Когда я запускаю спецификацию, до При реализации в Checker Class я получаю:

9  - it should pass params to checker on execute
no calls been made that match:
Double\Checker\P1->execute(exact([1, 2]))
but expected at least one.

После того, как я реализую:

class Check
{
public $checker;

public $params = array();

public function doCheck()
{
$this->checker->execute($this->params);
}
}

Я получил:

9  - it should pass params to checker on execute
method call:
- execute([1, 2])
on Double\Checker\P1 was not expected, expected calls were:
- execute()

Что дает? Насколько я могу сказать, я реализовал, как указано.

1

Решение

Я понял:

class CheckSpec extends ObjectBehavior
{
function it_should_pass_params_to_checker_on_execute(\Checker $checker)
{
// I should've created my mock with the expected parameters
$checker->execute(array(1,2))->willReturn(true);
// Like so ------>^^^^^^^^^^^
$this->checker = $checker;
$this->params = array(1,2);
$this->doCheck();
$checker->execute(array(1,2))->shouldHaveBeenCalled();
}
}
0

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

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

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