| Q | A
| -------------------- | ---------------
| Versión PHPUnit | 9.2.5
| Versión PHP | PHP 7.4.7 (cli) (construido: 11 de junio de 2020 18:33:07) (NTS)
| Método de instalación | Compositor
Al pasar una instancia Exception
través de un dataProvider, se lanza una ReflectionException no detectada:
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 Comprobación rápida: está ejecutando las pruebas en un proceso separado, ¿es correcto?
Para pasar los datos proporcionados del proceso PHPUnit de orquestación al aislado, utiliza [un]serialize($data)
.
@sebastianbergmann ¿Es esta una limitación conocida y un comportamiento esperado?
@stemis Comprobación rápida: está ejecutando las pruebas en un proceso separado, ¿es correcto?
Para pasar los datos proporcionados del proceso PHPUnit de orquestación al aislado, utiliza[un]serialize($data)
.
Sí, esto solo sucede con processIsolation
activado
@stemis Gracias por la información adicional. La transmisión de datos mediante serialización solo debe usarse para procesos externos, incluidos los archivos PHPT. ~ Con la próxima refactorización de @dataProvider
me gustaría saber qué está pasando aquí. Vea qué sabe @sebastianbergmann sobre el comportamiento previsto. ~
¡Ah! Gracias por las notas del parche de tu actualización :)
Sería genial si hubiera una manera de pasar _cualquier_ tipo de datos entre procesos. Discutiré esto, tal vez pueda colocar una bifurcación en este mecanismo mientras refactorizo el ciclo de carga-ejecución-descarga del proveedor de datos.
Gracias por informarme sobre esto. Responderé aquí en algún momento de la próxima semana cuando trabaje en el # 4302 (refactorización del bucle principal) y el # 3736 (gestión de recursos del proveedor de datos).