Heim > Fragen und Antworten > Hauptteil
Ich habe eine Methode, die als Teil einer größeren Methode mehrmals mit unterschiedlichen Parametern aufgerufen wird.
$query->where("one", $id); $query->where("two", "LIKE %{$name}%"); $query->where("three", false); $query->where("four", true);
Ich verwende PHPUnit 10 und möchte einen Unit-Test für diese spezielle Methode schreiben. Ich möchte überprüfen, ob die Methode where
viermal mit bestimmten Parametern aufgerufen wird.
Zum Beispiel:
$mockedQuery->expects($this->exactly(4)) ->method("where") ->with( // Here I'd like to specify the list of arguments // or perhaps a map or something ) ->willReturn($mockedQuery);
Das obige ->will
funktioniert nicht für die Angabe verschiedener Parameter für aufeinanderfolgende Aufrufe derselben Methode (oder zumindest konnte ich es nicht zum Laufen bringen).
Ich habe versucht, die Dokumentation zu verwenden, weiß aber nicht genau, wonach ich suchen soll, daher ist es schwer, es zu finden.
P粉7983434152024-04-06 00:53:32
我会回答我自己的问题,因为我必须进行一些挖掘。
对于 PHPUnit 10,方法 withConsecutive
(这就是我正在寻找的,我只是不知道它叫这个)已被删除。不存在官方替代品。
我使用的解决方法是
$matcher = $this->exactly(2); $this->mock ->expects($matcher) ->method('get') ->willReturnCallback(function (string $param) use ($matcher) { match ($matcher->numberOfInvocations()) { 1 => $this->assertEquals($param, 'someValue'), 2 => $this->assertEquals($param, 'someOtherValue'), }; })