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

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

от yasmine , в категории: PHP , 8 месяцев назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от pauline , 8 месяцев назад

@yasmine 

В PHPSpec вы можете проверить передачу аргументов при вызове метода на мок-объекте с помощью метода shouldHaveBeenCalledWith.


Для начала, вам нужно создать мок-объект с помощью метода prophesize, передав в него класс или интерфейс, для которого вы хотите создать мок-объект.


Затем вызовите ожидаемый метод с аргументами на мок-объекте и проверьте передачу аргументов с помощью метода shouldHaveBeenCalledWith.


Вот пример:

 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
use ProphecyPhpUnitProphecyTrait;
use PsrLogLoggerInterface;

class Foo
{
    private $logger;
    
    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function doSomething($arg1, $arg2)
    {
        $this->logger->info("Doing something with args $arg1 and $arg2");
    }
}

class FooSpec extends ObjectBehavior
{
    use ProphecyTrait;

    function it_should_do_something(LoggerInterface $logger)
    {
        $this->beConstructedWith($logger);

        $logger->info("Doing something with args foo and bar")->shouldBeCalled();
        
        $this->doSomething('foo', 'bar');
        
        $logger->info("Doing something with args foo and bar")->shouldHaveBeenCalledWith();
    }
}


В этом примере мы создали мок-объект $logger с помощью метода prophesize(LoggerInterface::class), вызвали ожидаемый метод info с аргументами "Doing something with args foo and bar" на мок-объекте, а затем проверили, что передача аргументов была выполнена правильно с помощью shouldHaveBeenCalledWith.