我有一個方法,作為更大方法的一部分,使用不同的參數呼叫了多次。
$query->where("one", $id); $query->where("two", "LIKE %{$name}%"); $query->where("three", false); $query->where("four", true);
我正在使用 PHPUnit 10,我想為這個特定方法寫一個單元測試。我想檢查 where
方法是否使用一些特定參數呼叫了 4 次。
例如:
$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);
上面的 ->will
不適用於為同一方法的連續呼叫指定不同的參數(或至少我無法讓它工作)。
我嘗試過使用文檔,但不知道到底要搜尋什麼,因此很難找到。
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'), }; })