2017-07-03 12 views
0

私のCakePHPアプリケーションにBurzumのCakePHP File Storageプラグインをインストールし、それにAmazon AWS PHP SDKをインストールしました。 (それぞれ、私はPHPUnitの--filterを使用するかどうかにかかわらず、上記の例では、私は1つのテストのみを実行し、それはそれぞれ、すべてのテストに失敗した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. 

:今、すべての私の515回のユニットテストは、次のメッセージで失敗します同じエラーで時間があります)

CakePHPのバージョンは3.4.7、PHPUnitのバージョンは5.7.0です。正直言って、なぜPHPUnitがそれぞれのテストごとにAWS SDKに入っているのか、なぜこのように失敗しているのか分かりません。どんな指針も大変ありがとうございます。

アップデート:私はちょうどAwsClient.php:230echo \Cake\Error\Debugger::trace();入れているNDMの先端に続き

。出力は次のようになります。それはAws\S3\S3Clientのインスタンスはグローバル変数として設定されていることが判明し

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 
+1

エラーが発生した場合は常に、_complete_エラー**、つまり_full_ stacktrace **(問題の場合でも適切に読める形式でログからコピーされることが理想的です)を**投稿してくださいCakePHPに精通している人には明らかかもしれません!理想的には、適切なコンテキストを表示/記述します。つまり、エラーを実際にトリガするコードを表示/強調表示します。 – ndm

+0

ありがとうございます。残念ながらそれ以上のことはありませんが、私はPHPUnitの完全な出力で投稿を編集しました。私はどのコードが実際にエラーを引き起こすのか分かりません。 –

+0

私は以前同様の問題を抱えていたと思いますが、修正したものは覚えていません。しかし、問題はかなり明確です:何か(あなたが把握しなければならない部分)は、直列化できないオブジェクトのインスタンスを直列化しようとしています。私はあなたのテストでは、アダプタを何とか模倣したり、ストレージ関連のメソッドをモックすることをお勧めします。 – burzum

答えて

0

。 PHPUnitはこれをシリアル化しようとし、失敗します。正しい方向に私を指しているためNDMとバーズムへ

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit 
    colors="true" 
    processIsolation="false" 
    stopOnFailure="false" 
    syntaxCheck="false" 
    bootstrap="./tests/bootstrap.php" 
    backupGlobals="false" 
    > 
    <php> 
     <ini name="memory_limit" value="-1"/> 
     <ini name="apc.enable_cli" value="1"/> 
    </php> 

    <!-- Add any additional test suites you want to run here --> 
    <testsuites> 
     <testsuite name="Unit"> 
... 

シャウトアウト:ソリューションは、phpunit.xml設定ファイルでfalseにbackupGlobalsを設定することでした。

関連する問題