在我的CakePHP應用程序中安裝了Burzum的CakePHP File Storage插件,並在其中安裝了Amazon AWS PHP SDK。現在,我所有的515次單元測試失敗,出現以下消息:PHPUnit RuntimeException:Aws S3 S3Client的實例無法序列化
$ php vendor/bin/phpunit --filter testGenerateWithOnlyUppercase
PHPUnit 5.7.0 by Sebastian Bergmann and contributors.
E 1/1 (100%)
Time: 273 ms, Memory: 26.25MB
There was 1 error:
1) App\Test\TestCase\Auth\DefaultPasswordGeneratorTest::testGenerateWithOnlyUppercase
RuntimeException: Instances of Aws\S3\S3Client cannot be serialized
/var/www/html/MyProject/vendor/aws/aws-sdk-php/src/AwsClient.php:230
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
(在上面的例子中,我只運行一個測試,但它無法對每一個測試,我是否使用PHPUnit的--filter與否,每個時間與同樣的錯誤)
CakePHP版本是3.4.7,PHPUnit版本是5.7.0。說實話,我不知道爲什麼PHPUnit正在進入每個測試的AWS sdk,以及爲什麼它會失敗。任何指針將不勝感激。
更新:
繼NDM的提示,我已經把echo \Cake\Error\Debugger::trace();
只是AwsClient.php:230
之前。輸出是:
Aws\AwsClient::__sleep() - ROOT/vendor/aws/aws-sdk-php/src/AwsClient.php, line 230
serialize - [internal], line ??
SebastianBergmann\GlobalState\Snapshot::snapshotGlobals() - ROOT/vendor/sebastian/global-state/src/Snapshot.php, line 313
SebastianBergmann\GlobalState\Snapshot::__construct() - ROOT/vendor/sebastian/global-state/src/Snapshot.php, line 121
PHPUnit_Framework_TestCase::createGlobalStateSnapshot() - ROOT/vendor/phpunit/phpunit/src/Framework/TestCase.php, line 2488
PHPUnit_Framework_TestCase::snapshotGlobalState() - ROOT/vendor/phpunit/phpunit/src/Framework/TestCase.php, line 2407
PHPUnit_Framework_TestCase::runBare() - ROOT/vendor/phpunit/phpunit/src/Framework/TestCase.php, line 928
PHPUnit_Framework_TestResult::run() - ROOT/vendor/phpunit/phpunit/src/Framework/TestResult.php, line 701
PHPUnit_Framework_TestCase::run() - ROOT/vendor/phpunit/phpunit/src/Framework/TestCase.php, line 909
PHPUnit_Framework_TestSuite::run() - ROOT/vendor/phpunit/phpunit/src/Framework/TestSuite.php, line 728
PHPUnit_Framework_TestSuite::run() - ROOT/vendor/phpunit/phpunit/src/Framework/TestSuite.php, line 728
PHPUnit_Framework_TestSuite::run() - ROOT/vendor/phpunit/phpunit/src/Framework/TestSuite.php, line 728
PHPUnit_TextUI_TestRunner::doRun() - ROOT/vendor/phpunit/phpunit/src/TextUI/TestRunner.php, line 487
PHPUnit_TextUI_Command::run() - ROOT/vendor/phpunit/phpunit/src/TextUI/Command.php, line 188
PHPUnit_TextUI_Command::main() - ROOT/vendor/phpunit/phpunit/src/TextUI/Command.php, line 118
[main] - ROOT/vendor/phpunit/phpunit/phpunit, line 52
無論何時出現錯誤,請始終發佈** _complete_錯誤**,即**包括_full_堆棧跟蹤**(理想情況下,以可正常讀取的方式從日誌中複製),即使問題對熟悉CakePHP的人來說可能很明顯!還理想地顯示/描述正確的上下文,即顯示/突出顯示實際觸發錯誤的代碼。 – ndm
謝謝。不幸的是,我用PHPUnit的完整輸出編輯了我的帖子。我不知道什麼代碼實際觸發了錯誤。 –
我想我以前有類似的問題,但我不記得它修復了什麼。然而,問題很明顯:某些東西(即你需要弄清楚的部分)試圖序列化一個不可序列化的對象的實例。我建議您以任何方式模擬適配器,或者在測試中模擬存儲相關的方法。 – burzum