PHPUnit 10 ermöglicht die Angabe verschiedener Methodenparameter beim aufeinanderfolgenden Aufruf derselben Methode
P粉639667504
P粉639667504 2024-04-05 10:38:10
0
1
1498

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粉639667504
P粉639667504

Antworte allen(1)
P粉798343415

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

对于 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'),
                };
            })
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage