(PHPUnit) Как проверить несколько последовательных вызовов методов с разными аргументами?

#php #phpunit

Вопрос:

После выполнения теста я получаю следующее сообщение:

 Expectation failed for method name is "register" when invoked 4 time(s).
Method was expected to be called 4 times, actually called 1 times.
 

Как мне убедиться,что регистр вызывается 4 раза с аргументами D,E,F, G?
без изменения метода регистрации?

Код:

 class A
{
    public function register(InterfaceABC $bar): self
    {
        //doSomething
        return $this;
    }
}
 
 class Example {

    private A $a;

    public function __construct(A $a){
        $this->$a = $a;
    }

    public function fooBar() {
        $this->a->register(new D())
            ->register(new E())
            ->register(new F())
            ->register(new G());
    }


}
 
 class ExampleTest extends TestCase
{

    public function testFooBar()
    {
        $mock = $this->createMock(A:class);
        $mock->expects(self::exactly(4))
            ->method("register")
            ->withConsecutive(
                [self::isInstanceOf(D:class)],
                [self::isInstanceOf(E:class)],
                [self::isInstanceOf(F:class)],
                [self::isInstanceOf(G:class)]
        );

       (new Example($mock))->foobar();
    }
}
 

Ответ №1:

Ладно, круто, я отвечу сам.

Только что добавил ->willReturnSelf() и зеленый бум.

         $mock->expects(self::exactly(4))
            ->method("register")
            ->withConsecutive(
                [self::isInstanceOf(D:class)],
                [self::isInstanceOf(E:class)],
                [self::isInstanceOf(F:class)],
                [self::isInstanceOf(G:class)]
        )->willReturnSelf();