Heim  >  Fragen und Antworten  >  Hauptteil

PHPUnit 10 ermöglicht die Angabe verschiedener Methodenparameter beim aufeinanderfolgenden Aufruf derselben Methode

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粉639667504P粉639667504220 Tage vor1483

Antworte allen(1)Ich werde antworten

  • P粉798343415

    P粉7983434152024-04-06 00:53:32

    我会回答我自己的问题,因为我必须进行一些挖掘。

    对于 PHPUnit 10,方法 withConsecutive (这就是我正在寻找的,我只是不知道它叫这个)已被删除。不存在官方替代品。

    该问题是在 PHPUnit 存储库上提出的

    我使用的解决方法是

    $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'),
                    };
                })

    Antwort
    0
  • StornierenAntwort