首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHPUnit RuntimeException: Aws\S3\S3Client的实例不能序列化

PHPUnit RuntimeException: Aws\S3\S3Client的实例不能序列化
EN

Stack Overflow用户
提问于 2017-07-03 12:26:38
回答 1查看 1.4K关注 0票数 1

在我的CakePHP应用程序中安装了Burzum的CakePHP文件存储插件,并随之安装了Amazon。现在,我所有的515个单元测试都失败了,下面的消息如下:

代码语言:javascript
复制
$ 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 --过滤器,每次都有相同的错误)

CakePHP版本为3.4.7,PHPUnit版本为5.7.0。老实说,我不知道为什么PHPUnit要为每个测试进入AWS,也不知道为什么它会像这样失败。任何指示都将不胜感激。

更新:

按照ndm的技巧,我把echo \Cake\Error\Debugger::trace();放在了AwsClient.php:230之前。产出如下:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-03 14:37:15

结果,Aws\S3\S3Client的一个实例被设置为一个全局变量。然后,PHPUnit尝试序列化它,但是失败了。解决方案是在backupGlobals配置文件中将phpunit.xml设置为false:

代码语言:javascript
复制
<?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">
...

向ndm和burzum大喊大叫,感谢他们为我指明了正确的方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44885591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档