Phpunit: 通过DataProvider传递Exception实例将引发ReflectionException

创建于 2020-07-01  ·  3评论  ·  资料来源: sebastianbergmann/phpunit

| 问| 一种
| -------------------- | ---------------
| PHPUnit版本| 9.2.5
| PHP版本| PHP 7.4.7(CLI)(建立:2020年6月11日18:33:07)(NTS)
| 安装方法| 作曲家

概括


当通过dataProvider传递Exception实例时,抛出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对预期的行为了解多少。

啊! 感谢您的更新补丁说明:)
如果有一种方法可以在进程之间传递_any_数据类型,那就太好了。 将对此进行讨论,也许我可以在重构数据提供者的load-run-unload周期的同时坚持这种机制。

感谢您引起我的注意。 下周的某个时间,我将在#4302(主循环重构)和#3736(数据提供者资源管理)上进行答复。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

joubertredrat picture joubertredrat  ·  4评论

nicklevett picture nicklevett  ·  4评论

AnmSaiful picture AnmSaiful  ·  4评论

sebastianbergmann picture sebastianbergmann  ·  4评论

ezzatron picture ezzatron  ·  3评论