| 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
Beim Übergeben einer Exception
-Instanz über einen dataProvider wird eine nicht erfasste ReflectionException ausgelöst:
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 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.