@krista
В PHPSpec можно проверять вызовы методов, в том числе и вызовы других функций. Для этого можно использовать методы shouldHaveBeenCalled
или shouldNotHaveBeenCalled
в сочетании с willReturn
, shouldBeCalled
и другими методами.
Пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
use MyNamespaceMyClass; class MyClassSpec extends ObjectBehavior { function it_should_call_another_function() { // создаем заглушку для функции $this->shouldAllowMockingFunction('MyNamespaceanotherFunction'); // вызываем метод, который должен вызывать другую функцию $this->myMethod(); // проверяем, что функция была вызвана один раз $this->shouldHaveBeenCalled(); // проверяем, что функция НЕ была вызвана $this->shouldNotHaveBeenCalled(); // можно также проверить аргументы, с которыми функция была вызвана $this->shouldHaveBeenCalledWith('argument1', 2, true); // или проверить, что функция была вызвана несколько раз $this->shouldHaveBeenCalledTimes(3); // или проверить, что функция была вызвана в определенном порядке $this->shouldHaveBeenCalledBefore('anotherFunction'); $this->shouldHaveBeenCalledAfter('anotherFunction'); // можно также указать, что функция должна вернуть значение $this->shouldReturn('expectedValue'); $this->shouldHaveReceived('anotherFunction')->with('argument1', 2, true)->once(); } function it_should_assert_another_function_was_called() { // создаем заглушку для класса, в котором находится функция $anotherObject = $this->prophesize('MyNamespaceAnotherClass'); // указываем, что метод должен быть вызван $anotherObject->anotherFunction('argument1', 2, true)->shouldBeCalled(); // передаем заглушку в метод и вызываем его $this->myMethodWithAnotherObject($anotherObject->reveal()); // проверяем, что метод был вызван $anotherObject->anotherFunction('argument1', 2, true)->shouldHaveBeenCalled(); } } |
В этом примере мы используем гибкие заглушки (prophesize
) для других классов и функций, чтобы проверить, были ли они вызваны с нужными аргументами и сколько раз.
@krista
Приведенный пример показывает различные способы проверки вызовов функций в PHPSpec, включая проверку аргументов, количества вызовов, порядка вызовов и возвращаемых значений.
Для создания заглушек в PHPSpec используется метод shouldAllowMockingFunction('функция') для функций, и метод prophesize('класс') для классов. Эти заглушки затем используются для проверки вызовов методов или функций с помощью методов shouldBeCalled, shouldHaveBeenCalled, shouldHaveBeenCalledTimes и других.
Для проверки возвращаемых значений функции можно использовать метод shouldReturn('значение'). Также можно проверить вызов с определенными аргументами с помощью метода shouldHaveBeenCalledWith.
Для проверки вызовов функций в других объектах, можно создать заглушку объекта с помощью prophesize, указать, что метод должен быть вызван с определенными аргументами с помощью shouldBeCalled и затем проверить вызов с помощью shouldHaveBeenCalled.
Общий сценарий проверки вызова функции в PHPSpec состоит из создания заглушек для функций или классов, вызова тестируемого метода, а затем проверки вызовов с помощью методов shouldHaveBeenCalled, shouldBeCalled и других, в зависимости от требуемых условий проверки.
@krista
Если у вас есть конкретный вопрос или нужна дополнительная информация о проверке вызова функций в PHPSpec, пожалуйста, уточните или задайте более подробный вопрос, и я постараюсь помочь вам.