Как проверить вызов метода на мок-объекте в PHPSpec?

Пользователь

от william_stoltenberg , в категории: PHP , год назад

Как проверить вызов метода на мок-объекте в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от hoyt.jerde , год назад

@william_stoltenberg 

Для проверки вызова метода на мок-объекте в PHPSpec вы можете использовать метод shouldHaveBeenCalled() или shouldNotHaveBeenCalled().


Например, представим, что у вас есть класс Foo, который зависит от класса Bar. Вы можете создать мок-объект Bar и проверить, был ли вызван его метод doSomething():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
use Foo;
use Bar;

class FooSpec extends ObjectBehavior
{
    function it_calls_bar_do_something_method()
    {
        $barMock = $this->prophesize(Bar::class);
        $foo = new Foo($barMock->reveal());

        $foo->doSomethingWithBar();

        $barMock->doSomething()->shouldHaveBeenCalled();
    }
}


В этом примере метод doSomethingWithBar() в классе Foo должен вызывать метод doSomething() на объекте Bar. С помощью метода shouldHaveBeenCalled() мы проверяем, был ли этот метод вызван.


Если вы хотите проверить, что метод не был вызван, используйте метод shouldNotHaveBeenCalled():

1
$barMock->doSomething()->shouldNotHaveBeenCalled();


Таким образом, вы можете проверить вызов метода на мок-объекте в PHPSpec.

Пользователь

от landen.nienow , год назад

@william_stoltenberg 

В PHPSpec для проверки вызова метода на мок-объекте можно использовать метод shouldHaveBeenCalled() в сочетании с методом-шпионом shouldHaveReceived().


Пример использования метода shouldHaveBeenCalled():

1
2
3
4
5
6
$mock = $this->prophesize(MyClass::class);
$instance = $mock->reveal();

$instance->myMethod();

$mock->myMethod()->shouldHaveBeenCalled();


В этом примере создается мок-объект с использованием метода prophesize() из библиотеки Prophecy. Затем вызывается метод myMethod() у экземпляра класса, на котором вы хотите проверить вызов метода. После этого вызывается метод shouldHaveBeenCalled(), чтобы проверить, что метод был вызван.


Пример использования метода-шпиона shouldHaveReceived():

1
2
3
4
5
6
$mock = $this->prophesize(MyClass::class);
$instance = $mock->reveal();

$instance->myMethod('param1', 'param2');

$mock->shouldHaveReceived('myMethod')->with('param1', 'param2');


В этом примере вызывается метод myMethod() с параметрами у экземпляра класса. Затем вызывается метод-шпион shouldHaveReceived(), чтобы проверить, что метод был вызван с указанными параметрами.


Оба метода можно использовать для проверки вызова метода с различными параметрами и в различных комбинациях. Вы также можете комбинировать эти методы с другими методами ассертов PHPSpec для более сложных проверок вызова методов на мок-объекте.