@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
) для других классов и функций, чтобы проверить, были ли они вызваны с нужными аргументами и сколько раз.