Phpunit: Wenn Sie die Ausnahmeinstanz über DataProvider übergeben, wird eine ReflectionException ausgelöst

Erstellt am 1. Juli 2020  ·  3Kommentare  ·  Quelle: sebastianbergmann/phpunit

| Q | EIN
| -------------------- | ---------------
| PHPUnit Version | 9.2.5
| PHP-Version | PHP 7.4.7 (cli) (erstellt: 11. Juni 2020, 18:33:07 Uhr) (NTS)
| Installationsmethode | Komponist

Zusammenfassung


Beim Übergeben einer Exception -Instanz über einen dataProvider wird eine nicht erfasste ReflectionException ausgelöst:

Aktuelles Verhalten

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

Wie zu reproduzieren

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

Alle 3 Kommentare

@stemis Schnelle Überprüfung: Sie führen die Tests in einem separaten Prozess aus.
Um die bereitgestellten Daten aus dem orchestrierenden PHPUnit-Prozess an den isolierten zu übergeben, wird [un]serialize($data) .

@sebastianbergmann Ist dies eine bekannte Einschränkung und ein erwartetes Verhalten?

@stemis Schnelle Überprüfung: Sie führen die Tests in einem separaten Prozess aus.
Um die bereitgestellten Daten aus dem orchestrierenden PHPUnit-Prozess an den isolierten zu übergeben, wird [un]serialize($data) .

Ja, dies geschieht nur, wenn processIsolation aktiviert ist

@stemis Danke für die zusätzlichen Informationen. Die Weitergabe von Daten mithilfe der Serialisierung sollte nur für externe Prozesse einschließlich PHPT-Dateien verwendet werden. ~ Mit dem bevorstehenden @dataProvider Refactoring würde ich gerne wissen, was hier los ist. Sehen Sie, was @sebastianbergmann über das beabsichtigte Verhalten weiß. ~

Ah! Danke für die Patchnotizen zu deinem Update :)
Ich wäre großartig, wenn es eine Möglichkeit gäbe, jeden Datentyp zwischen Prozessen zu übergeben. Ich werde dies diskutieren. Vielleicht kann ich einen Gabel in diesen Mechanismus stecken, während ich den Lade-, Lauf- und Entladezyklus des Datenanbieters umgestalte.

Vielen Dank, dass Sie mich darauf aufmerksam gemacht haben. Ich werde hier irgendwann nächste Woche antworten, wenn ich an # 4302 (Refactoring der Hauptschleife) und # 3736 (Ressourcenverwaltung des Datenanbieters) arbeite.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen