在我的CakePHP应用程序中安装了Burzum的CakePHP文件存储插件,并随之安装了Amazon。现在,我所有的515个单元测试都失败了,下面的消息如下:
$ 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之前。产出如下:
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发布于 2017-07-03 14:37:15
结果,Aws\S3\S3Client的一个实例被设置为一个全局变量。然后,PHPUnit尝试序列化它,但是失败了。解决方案是在backupGlobals配置文件中将phpunit.xml设置为false:
<?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大喊大叫,感谢他们为我指明了正确的方向。
https://stackoverflow.com/questions/44885591
复制相似问题