Phpunit: Meneruskan instance Exception melalui DataProvider akan melontarkan ReflectionException

Dibuat pada 1 Jul 2020  ·  3Komentar  ·  Sumber: sebastianbergmann/phpunit

| Q | SEBUAH
| -------------------- | ---------------
| Versi PHPUnit | 9.2.5
| Versi PHP | PHP 7.4.7 (cli) (dibangun: Jun 11 2020 18:33:07) (NTS)
| Metode Instalasi | Komposer

Ringkasan


Saat meneruskan instance Exception melalui dataProvider, Uncaught ReflectionException dilemparkan:

Perilaku saat ini

Fatal error: Uncaught Exception: Serialization of 'ReflectionClass' is not allowed in /var/www/html/vendor/phpunit/phpunit/src/Framework/TestCase.php:723
Stack trace:
#0 /var/www/html/vendor/phpunit/phpunit/src/Framework/TestCase.php(723): serialize(Array)
#1 /var/www/html/vendor/phpunit/phpunit/src/Framework/TestSuite.php(638): PHPUnit\Framework\TestCase->run(Object(PHPUnit\Framework\TestResult))
#2 /var/www/html/vendor/phpunit/phpunit/src/Framework/TestSuite.php(638): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#3 /var/www/html/vendor/phpunit/phpunit/src/Framework/TestSuite.php(638): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#4 /var/www/html/vendor/phpunit/phpunit/src/Framework/TestSuite.php(638): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#5 /var/www/html/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(657): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
#6 /var/www/html/vendor/phpunit/phpunit/src/TextUI/Command in /var/www/html/vendor/phpunit/phpunit/src/Framework/TestCase.php on line 723

Bagaimana cara memperbanyak

processIsolation="true"

class MyTest extends \PHPUnit\Framework\TestCase
{
    /**
     * <strong i="20">@dataProvider</strong> thisMethodDataProvider
     */
    public function testThisMethod(\Exception $expectedException): void
    {
        // ...
    }

    public function thisMethodDataProvider()
    {
        return [
            [new \Exception()],
        ];
    }
}
typbug

Semua 3 komentar

@stemis Pemeriksaan cepat: Anda menjalankan pengujian dalam proses terpisah, apakah itu benar?
Untuk meneruskan data yang disediakan dari proses PHPUnit yang mengatur ke yang terisolasi, ia menggunakan [un]serialize($data) .

@sebastianbergmann Apakah ini batasan yang diketahui dan perilaku yang diharapkan?

@stemis Pemeriksaan cepat: Anda menjalankan pengujian dalam proses terpisah, apakah itu benar?
Untuk meneruskan data yang disediakan dari proses PHPUnit yang mengatur ke yang terisolasi, ia menggunakan [un]serialize($data) .

Ya, ini hanya terjadi dengan processIsolation dihidupkan

@stemis Terima kasih atas informasi tambahannya. Meneruskan data menggunakan serialisasi sebaiknya hanya digunakan untuk proses eksternal termasuk file PHPT. ~ Dengan refactoring @dataProvider akan datang, saya ingin tahu apa yang terjadi di sini. Lihat apa yang diketahui @sebastianbergmann tentang perilaku yang diinginkan. ~

Ah! Terima kasih atas catatan tambalan untuk pembaruan Anda :)
Saya akan lebih baik jika akan ada cara untuk melewatkan tipe data _any_ antar proses. Akan membahas ini, mungkin saya bisa tetap bercabang dalam mekanisme ini saat refactoring siklus load-run-unload penyedia data.

Terima kasih sudah membawa ini padaku. Saya akan membalas di sini minggu depan ketika mengerjakan # 4302 (refactoring loop utama) dan # 3736 (manajemen sumber daya penyedia data).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat