2014-02-03 1 views
2

Я пытаюсь выполнить модульный тест контроллера, где у меня есть $this->library->client->changeLog->create(), и мне интересно, нужно ли мне издеваться над каждым из этих свойств, или если я могу как-то глубоко рассмешить $this->library, так что У меня не должно быть длинной цепочки объектов, которые насмехаются, и им приходится беспокоиться об их параметрах конструктора. Я пытаюсь высмеять цепочку прямо сейчас, и это очень уродливо и не очень хорошо работает.Как глубоко издеваться над классом, который поддерживает методы цепочки

Я также попытался $this->library->shouldReceive('client->changeLog->create')->once()->andReturn(true);, но это приводит к «пытается получить свойство не-объекта.

Есть простой способ проверить выходной сигнал на выходе метода это несколько глубоких свойств?

ответ

1

Теоретически результат возврата каждого из измененных вызовов метода возвращал значение $ this, поэтому вам нужно было бы создать макет объекта и вернуть его на каждый вызов метода. Вот пример этого при переполнении стека.

Mock objects which support chaining methods

Код, подобный этому, часто можно рассматривать как запах кода, о котором вы можете узнать больше здесь, в этой статье переполнения стека.

"Message Chains" vs "Middle Man"

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

После этого вы могли бы повторно преобразовать код, чтобы у вас не было вызова метода с цепочкой, что упростило бы насмешку и тестирование.