ホームページ >バックエンド開発 >PHPチュートリアル >PHPUnit 例外: クロージャのシリアル化は許可されていません
あなたの問題とは技術的には関係ありません。ただし、PHPUnit の使用中に「'Closure' のシリアル化は許可されていません」という問題を解決するのに非常に苦労しました。この質問は Google の検索結果でトップになりました。
この問題は、PHPUnit がすべての $ をシリアル化するという事実から発生します。システム内の GLOBALS は、テストの実行中にそれらをバックアップするために必要です。テストが完了するとそれらは復元されます。
ただし、GLOBAL スペースにクロージャーがある場合、問題が発生します。これを解決するには 2 つの方法があります。
アノテーションを使用すると、グローバル バックアップ手順を完全に無効にすることができます。
/**
* @backupGlobals は無効です
*/
class MyTest extends PHPUnit_Framework_TestCase
{
// ...
}
または、どの変数が問題の原因であるかがわかっている場合 (var_dump($GLOBALS) でラムダを探す)、問題の変数をブラックリストに登録するだけです。
class MyTest extends PHPUnit_Framework_TestCase
{
protected $backupGlobalsBlacklist = array('application');
// ...
}
项目在PHPUNIT单元测试時报错:「'Closure'のシリアル化は許可されていません」,これはPHPUNITがすべてを所有しているためですの $GLOBALS のすべての系列化が完了し、その後等が完全な再放出を実行するため、その結果、全ローカルフィールドにセキュリティ パケットがある場合、「セキュリティ パケットの系列化は許可されていません」と警告されます。解決方法は上記と同様に、PHPUNIT 要素のテストの最初に追加され、backupGlobals の使用を無効にし、完全にローカルに返しますか?