Rumah > Soal Jawab > teks badan
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粉7983434152024-04-06 00:53:32
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'), }; })