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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от loyal , год назад

@dorothea_stoltenberg 

Для проверки вызова метода в PHPSpec можно использовать специальный метод shouldHaveBeenCalled(). Пример использования:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function it_should_call_something() {
    // Создаем мок-объект
    $mock = $this->get('SomeClass');

    // Вызываем метод на мок-объекте
    $mock->someMethod();

    // Проверяем, что метод был вызван
    $mock->shouldHaveBeenCalled();
}


Также можно проверить количество вызовов метода с помощью shouldHaveBeenCalledTimes() и передать ожидаемое число вызовов в виде параметра:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function it_should_call_something_multiple_times() {
    // Создаем мок-объект
    $mock = $this->get('SomeClass');

    // Вызываем метод несколько раз на мок-объекте
    $mock->someMethod();
    $mock->someMethod();

    // Проверяем, что метод был вызван два раза
    $mock->shouldHaveBeenCalledTimes(2);
}


Также можно проверить аргументы, переданные при вызове метода с помощью shouldBeCalledWith() и передать ожидаемые аргументы в виде параметра:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
function it_should_call_something_with_args() {
    // Создаем мок-объект
    $mock = $this->get('SomeClass');

    // Вызываем метод с аргументами на мок-объекте
    $mock->someMethod('argument1', 'argument2');

    // Проверяем, что метод был вызван с указанными аргументами
    $mock->shouldBeCalledWith('argument1', 'argument2');
}


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

от jedidiah.brown , год назад

@dorothea_stoltenberg 

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


Пример:

1
2
3
4
5
6
7
8
bar();

        // проверяем, что метод был вызван
        $this->shouldBeCalled('bar');
        // или
        $this->shouldHaveBeenCalled('bar');
    }
}


В этом примере метод bar() вызывается на объекте $this, а затем с помощью shouldHaveBeenCalled() или shouldBeCalled() проверяется, что метод был вызван.


Также можно использовать хитрость ProphecyArgument::cetera() в методе shouldHaveBeenCalled() для проверки, что метод был вызван с любыми аргументами:

1
2
3
4
5
6
bar('arg1', 'arg2');

        // проверяем, что метод был вызван с любыми аргументами
        $this->shouldHaveBeenCalled('bar', [Argument::cetera(), Argument::cetera()]);
    }
}


В этом примере вызывается метод bar() с аргументами 'arg1' и 'arg2'. Затем с помощью shouldHaveBeenCalled() и аргументами [Argument::cetera(), Argument::cetera()] проверяется, что метод был вызван с любыми аргументами.