| Q | A
| -------------------- | ---------------
| PHPUnitバージョン| 9.2.5
| PHPバージョン| PHP 7.4.7(cli)(ビルド:2020年6月11日18:33:07)(NTS)
| インストール方法| 作曲
dataProviderを介してException
インスタンスを渡すと、UncaughtReflectionExceptionがスローされます。
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_データ型を渡す方法があれば素晴らしいと思います。 これについて説明します。おそらく、データプロバイダーのロード-実行-アンロードのサイクルをリファクタリングしながら、このメカニズムに分岐することができます。
これを私の注意を引いてくれてありがとう。 来週、#4302(メインループリファクタリング)と#3736(データプロバイダーのリソース管理)に取り組んでいるときに、ここに返信します。