Phpunit: DataProviderを介してExceptionインスタンスを渡すと、ReflectionExceptionがスローされます

作成日 2020年07月01日  ·  3コメント  ·  ソース: sebastianbergmann/phpunit

| 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()],
        ];
    }
}
typbug

全てのコメント3件

@stemisクイックチェック:別のプロセスでテストを実行していますが、それは正しいですか?
提供されたデータをオーケストレーションするPHPUnitプロセスから分離されたプロセスに渡すために、 [un]serialize($data)ます。

@sebastianbergmannこれは既知の制限であり、予想される動作ですか?

@stemisクイックチェック:別のプロセスでテストを実行していますが、それは正しいですか?
提供されたデータをオーケストレーションするPHPUnitプロセスから分離されたプロセスに渡すために、 [un]serialize($data)ます。

はい、これはprocessIsolationがオンになっている場合にのみ発生します

@stemis追加情報をありがとう。 シリアル化を使用してデータを渡すことは、PHPTファイルを含む外部プロセスにのみ使用する必要があります。 〜今後の@dataProviderリファクタリングで、ここで何が起こっているのか知りたいです。 @sebastianbergmannが意図した動作について知っていることを

ああ! アップデートのパッチノートをありがとう:)
プロセス間で_any_データ型を渡す方法があれば素晴らしいと思います。 これについて説明します。おそらく、データプロバイダーのロード-実行-アンロードのサイクルをリファクタリングしながら、このメカニズムに分岐することができます。

これを私の注意を引いてくれてありがとう。 来週、#4302(メインループリファクタリング)と#3736(データプロバイダーのリソース管理)に取り組んでいるときに、ここに返信します。

このページは役に立ちましたか?
0 / 5 - 0 評価