首頁  >  問答  >  主體

PHPUnit 10允許在連續呼叫相同方法時指定不同的方法參數

我有一個方法,作為更大方法的一部分,使用不同的參數呼叫了多次。

$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粉639667504P粉639667504220 天前1485

全部回覆(1)我來回復

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

    回覆
    0
  • 取消回覆