PHPUnit 10 membenarkan menentukan parameter kaedah yang berbeza apabila memanggil kaedah yang sama berturut-turut
P粉639667504
P粉639667504 2024-04-05 10:38:10
0
1
1563

Saya mempunyai kaedah yang dipanggil beberapa kali dengan parameter berbeza sebagai sebahagian daripada kaedah yang lebih besar.

$query->where("one", $id);
$query->where("two", "LIKE %{$name}%");
$query->where("three", false);
$query->where("four", true);

Saya menggunakan PHPUnit 10 dan saya ingin menulis ujian unit untuk kaedah khusus ini. Saya ingin menyemak sama ada kaedah where dipanggil 4 kali dengan beberapa parameter tertentu.

Contohnya:

$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 di atas tidak berfungsi untuk menentukan parameter berbeza untuk panggilan berturut-turut kepada kaedah yang sama (atau sekurang-kurangnya saya tidak dapat menjalankannya).

Saya cuba menggunakan dokumentasi tetapi tidak tahu apa sebenarnya yang perlu dicari jadi sukar untuk dicari.

P粉639667504
P粉639667504

membalas semua(1)
P粉798343415

Saya akan menjawab soalan saya sendiri kerana saya perlu melakukan beberapa penggalian.

Untuk PHPUnit 10, kaedah withConsecutive (itulah yang saya cari, cuma saya tidak tahu ia dipanggil ini) telah dialih keluar. Tiada pengganti rasmi wujud.

Isu ini ditanya pada repositori PHPUnit

Penyelesaian yang saya gunakan ialah

$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'),
                };
            })
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan