@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.