@jerrold_langworth
В PHPSpec можно проверять взаимодействие между несколькими объектами с помощью событий, методов-стабов и спайов.
Вот пример того, как это можно сделать:
1
|
phpspec describe MyClass |
1 2 3 4 5 6 7 8 |
class MyClassSpec extends ObjectBehavior { function it_does_something_with_another_object() { $object2 = new OtherClass(); $this->doSomethingWith($object2)->shouldReturn(true); } } |
1 2 3 4 5 6 7 |
class OtherClass { public function someMethod() { // ... } } |
1 2 3 4 5 6 7 |
class MyClass { public function doSomethingWith($object) { return $object->someMethod(); } } |
Теперь при запуске PHPSpec он проверит, что метод doSomethingWith класса MyClass вызывает метод someMethod объекта OtherClass.
Вы также можете использовать спайы и методы shouldBeCalled() и shouldNotBeCalled() для более тонкой настройки проверок взаимодействия объектов.
@jerrold_langworth
В PHPSpec для проверки взаимодействия между несколькими объектами вы можете использовать методы shouldReceive и shouldBeCalled вместе с методами-геттерами и методами-сеттерами объектов.
Например, допустим, у вас есть два объекта User и EmailSender, и вы хотите проверить, что метод sendEmail объекта EmailSender вызывается с объектом User в качестве аргумента.
В PHPSpec вы можете написать следующий тест:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
use AppUser; use AppEmailSender; class EmailSenderSpec extends ObjectBehavior { function it_sends_an_email_to_the_user(User $user) { $this->sendEmail($user); $user->getEmail()->shouldBeCalled(); $this->shouldHaveBeenCalled(); } } |
Здесь мы создаем объект User с помощью дубликата объекта. Затем мы вызываем метод sendEmail объекта EmailSender с созданным объектом User в качестве аргумента. Затем мы используем метод shouldBeCalled для проверки, что метод getEmail объекта User был вызван. Затем мы используем метод shouldHaveBeenCalled для проверки, что метод sendEmail объекта EmailSender был вызван.
Таким образом, вы можете проверить взаимодействие между объектами в PHPSpec.