| Q | UNE
| -------------------- | ---------------
| Version de PHPUnit | 9.2.5
| Version PHP | PHP 7.4.7 (cli) (construit: 11 juin 2020 18:33:07) (NTS)
| Méthode d'installation | Compositeur
Lors du passage d'une instance Exception
via un dataProvider, une exception ReflectionException Uncaught est levée:
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 Vérification rapide: vous exécutez les tests dans un processus séparé, est-ce correct?
Afin de transmettre les données fournies du processus d'orchestration PHPUnit au processus isolé, il utilise [un]serialize($data)
.
@sebastianbergmann S'agit-il d'une limitation connue et d'un comportement attendu?
@stemis Vérification rapide: vous exécutez les tests dans un processus séparé, est-ce correct?
Afin de transmettre les données fournies du processus d'orchestration PHPUnit au processus isolé, il utilise[un]serialize($data)
.
Oui, cela ne se produit que lorsque processIsolation
activé
@stemis Merci pour les informations supplémentaires. La transmission de données à l'aide de la sérialisation ne doit être utilisée que pour les processus externes, y compris les fichiers PHPT. ~ Avec le prochain refactoring @dataProvider
j'aimerais savoir ce qui se passe ici. Découvrez ce que @sebastianbergmann sait du comportement prévu. ~
Ah! Merci pour les notes de patch de votre mise à jour :)
Ce serait formidable s'il y avait un moyen de passer le type de données _any_ entre les processus. Je vais discuter de cela, peut-être que je peux coller une fourchette dans ce mécanisme tout en refactorisant le cycle de chargement-exécution-déchargement du fournisseur de données.
Merci d'avoir porté ceci à mon attention. Je répondrai ici la semaine prochaine lorsque je travaillerai sur # 4302 (refactoring de la boucle principale) et # 3736 (gestion des ressources du fournisseur de données).