Phpunit: يؤدي تمرير مثيل الاستثناء عبر DataProvider إلى طرح ReflectionException

تم إنشاؤها على ١ يوليو ٢٠٢٠  ·  3تعليقات  ·  مصدر: sebastianbergmann/phpunit

| س | أ
| -------------------- | ---------------
| إصدار PHPUnit | 9.2.5
| إصدار PHP | PHP 7.4.7 (cli) (بنيت: Jun 11 2020 18:33:07) (NTS)
| طريقة التثبيت | ملحن

ملخص


عند تمرير مثيل Exception عبر dataProvider ، يتم طرح Uncaught ReflectionException:

السلوك الحالي

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

كيف تتكاثر

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

ال 3 كومينتر

stemis فحص سريع: أنت تجري الاختبارات في عملية منفصلة ، هل هذا صحيح؟
من أجل تمرير البيانات المقدمة من عملية PHPUnit المنظمة إلى العملية المعزولة ، فإنها تستخدم [un]serialize($data) .

sebastianbergmann هل هذا قيد معروف وسلوك متوقع؟

stemis فحص سريع: أنت تجري الاختبارات في عملية منفصلة ، هل هذا صحيح؟
من أجل تمرير البيانات المقدمة من عملية PHPUnit المنظمة إلى العملية المعزولة ، فإنها تستخدم [un]serialize($data) .

نعم ، يحدث هذا فقط عند تشغيل processIsolation

stemis شكرًا على المعلومات الإضافية. يجب استخدام تمرير البيانات باستخدام التسلسل فقط للعمليات الخارجية بما في ذلك ملفات PHPT. ~ مع إعادة بيع ديون المنازل القادمة @dataProvider أود أن أعرف ما الذي يحدث هنا. تعرف على ما يعرفه sebastianbergmann عن السلوك المقصود. ~

آه! شكرا لملاحظات التصحيح على التحديث الخاص بك :)
سأكون رائعًا إذا كانت هناك طريقة لتمرير أي نوع بيانات بين العمليات. سنناقش هذا ، ربما يمكنني لصق مفترق في هذه الآلية أثناء إعادة بناء دورة تحميل وتشغيل وتفريغ موفر البيانات.

شكرا للفت انتباهي لهذا الموضوع. سأرد هنا في وقت ما الأسبوع المقبل عند العمل على # 4302 (إعادة بناء الحلقة الرئيسية) و # 3736 (إدارة موارد مزود البيانات).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات