| 问| 一种
| -------------------- | ---------------
| 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()],
];
}
}
@stemis快速检查:您是在一个单独的过程中运行测试,对吗?
为了将提供的数据从业务流程PHPUnit进程传递到隔离的进程,它使用[un]serialize($data)
。
@sebastianbergmann这是已知的限制和预期的行为吗?
@stemis快速检查:您是在一个单独的过程中运行测试,对吗?
为了将提供的数据从业务流程PHPUnit进程传递到隔离的进程,它使用[un]serialize($data)
。
是的,只有在打开processIsolation
才会发生
@stemis感谢您提供其他信息。 使用序列化传递数据仅应用于包括PHPT文件在内的外部进程。 〜随着即将到来的@dataProvider
重构,我想知道这里发生了什么。 看看@sebastianbergmann对预期的行为了解多少。
啊! 感谢您的更新补丁说明:)
如果有一种方法可以在进程之间传递_any_数据类型,那就太好了。 将对此进行讨论,也许我可以在重构数据提供者的load-run-unload周期的同时坚持这种机制。
感谢您引起我的注意。 下周的某个时间,我将在#4302(主循环重构)和#3736(数据提供者资源管理)上进行答复。