ホームページ >バックエンド開発 >PHPチュートリアル >PHPUnit 例外: クロージャのシリアル化は許可されていません

PHPUnit 例外: クロージャのシリアル化は許可されていません

WBOY
WBOYオリジナル
2016-06-23 13:14:522198ブラウズ

あなたの問題とは技術的には関係ありません。ただし、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 の使用を無効にし、完全にローカルに返しますか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。