Phpunit: Передача экземпляра исключения через DataProvider вызывает исключение ReflectionException

Созданный на 1 июл. 2020  ·  3Комментарии  ·  Источник: sebastianbergmann/phpunit

| Q | А
| -------------------- | ---------------
| Версия PHPUnit | 9.2.5
| Версия PHP | PHP 7.4.7 (cli) (построено: 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()],
        ];
    }
}

Все 3 Комментарий

@stemis Быстрая проверка: вы запускаете тесты в отдельном процессе, это правильно?
Чтобы передать предоставленные данные из процесса оркестрации PHPUnit в изолированный, он использует [un]serialize($data) .

@sebastianbergmann Это известное ограничение и ожидаемое поведение?

@stemis Быстрая проверка: вы запускаете тесты в отдельном процессе, это правильно?
Чтобы передать предоставленные данные из процесса оркестрации PHPUnit в изолированный, он использует [un]serialize($data) .

Да, это происходит только при включенном processIsolation

@stemis Спасибо за дополнительную информацию. Передача данных с использованием сериализации должна использоваться только для внешних процессов, включая файлы PHPT. ~ В связи с предстоящим рефакторингом @dataProvider я хотел бы знать, что здесь происходит. Посмотрите, что @sebastianbergmann знает о предполагаемом поведении. ~

Ах! Спасибо за заметки о патче к вашему обновлению :)
Было бы здорово, если бы был способ передавать _any_ тип данных между процессами. Обсудим это, возможно, я смогу вставить вилку в этот механизм при рефакторинге цикла загрузки-выполнения-выгрузки поставщика данных.

Спасибо, что обратили на это мое внимание. Я отвечу здесь на следующей неделе, когда буду работать над # 4302 (рефакторинг основного цикла) и # 3736 (управление ресурсами поставщика данных).

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

greg0ire picture greg0ire  ·  4Комментарии

stephen-leavitt-sonyatv-com picture stephen-leavitt-sonyatv-com  ·  4Комментарии

sebastianbergmann picture sebastianbergmann  ·  3Комментарии

TiMESPLiNTER picture TiMESPLiNTER  ·  3Комментарии

keradus picture keradus  ·  4Комментарии