为什么当有大量异常时 phpunit 是绿色的?
Why phpunit is green when there are tons of exceptions?
为什么 phpunit 在有大量异常时是绿色的?
这是 travis 中的一个示例作业:https://travis-ci.org/ConnectCorp/nexmo-client/jobs/79275172
Strict standards: Declaration of Nexmo\Tests\Service\TestServiceTrait::exec() should be compatible with Nexmo\Service\Service::exec($params, $method = 'GET') in /home/travis/build/ConnectCorp/nexmo-client/tests/Service/VoiceTest.php on line 42
Call Stack:
0.0013 415584 1. {main}() /home/travis/.phpenv/versions/5.4.37/bin/phpunit:0
0.0209 1038200 2. PHPUnit_TextUI_Command::main() /home/travis/.phpenv/versions/5.4.37/bin/phpunit:722
0.0209 1044680 3. PHPUnit_TextUI_Command->run() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/TextUI/Command.php:104
0.0209 1045112 4. PHPUnit_TextUI_Command->handleArguments() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/TextUI/Command.php:114
0.0281 1812016 5. PHPUnit_Util_Configuration->getTestSuiteConfiguration() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/TextUI/Command.php:664
0.0281 1812928 6. PHPUnit_Util_Configuration->getTestSuite() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Configuration.php:814
0.0318 2063368 7. PHPUnit_Framework_TestSuite->addTestFiles() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Configuration.php:901
0.1145 6533504 8. PHPUnit_Framework_TestSuite->addTestFile() /home/travis/build/ConnectCorp/nexmo-client/vendor/phpunit/phpunit/src/Framework/TestSuite.php:403
0.1145 6571744 9. PHPUnit_Util_Fileloader::checkAndLoad() /home/travis/build/ConnectCorp/nexmo-client/vendor/phpunit/phpunit/src/Framework/TestSuite.php:331
0.1146 6571880 10. PHPUnit_Util_Fileloader::load() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Fileloader.php:42
0.1148 6681536 11. include_once('/home/travis/build/ConnectCorp/nexmo-client/tests/Service/VoiceTest.php') phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Fileloader.php:58
PHPUnit 4.8.6 by Sebastian Bergmann and contributors.
............................................................... 63 / 117 ( 53%)
......................................................
Time: 511 ms, Memory: 13.00Mb
OK (117 tests, 210 assertions)
https://travis-ci.org/ConnectCorp/nexmo-client/jobs/79275172
我预计它会失败并且 travis 报告构建失败,但它只是默默地通过了。是否缺少任何 phpunit 配置选项?
当前的 phpunit 配置是这样的:
<?xml version="1.0" encoding="utf-8"?>
<phpunit colors="true"
bootstrap="./vendor/autoload.php"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
stopOnFailure="false">
<testsuites>
<testsuite name="Nexmo Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<blacklist>
<directory suffix=".php">vendor/*</directory>
</blacklist>
</filter>
</phpunit>
即使有错误,实际上没有测试失败,所以 phpunit 将 return 一个成功代码。
在 运行 测试之前,phpunit 首先加载并解析 *Test.php
文件,这就是错误的来源,而不是测试方法本身。
将配置选项 stopOnFailure="false"
更改为 stopOnFailure="true"
或 stopOnError="true"
应该会使此任务失败。
--stop-on-error Stop execution upon first error.
--stop-on-failure Stop execution upon first error or failure.
编辑
实际上,只是在玩这个,因为它是一个通知,在测试实际开始之前,这些标志不会有任何效果。
您似乎在 phpunit 中发现了一个错误,我建议您将其报告给 their repository。
只有在测试 class 中触发通知时才会出现问题。您的模拟 classes 与测试 class 在同一文件中定义。如果您将它们移到自己的文件中,测试将按预期开始失败。方法需要与其父方法具有相同的签名。
可能还值得在您的 phpunit.xml
中配置错误报告以报告所有错误(尽管仅此一项并不能解决您当前的问题,但无论环境如何配置,错误报告都将启用):
<php>
<ini name="error_reporting" value="-1" />
</php>
为什么 phpunit 在有大量异常时是绿色的?
这是 travis 中的一个示例作业:https://travis-ci.org/ConnectCorp/nexmo-client/jobs/79275172
Strict standards: Declaration of Nexmo\Tests\Service\TestServiceTrait::exec() should be compatible with Nexmo\Service\Service::exec($params, $method = 'GET') in /home/travis/build/ConnectCorp/nexmo-client/tests/Service/VoiceTest.php on line 42
Call Stack:
0.0013 415584 1. {main}() /home/travis/.phpenv/versions/5.4.37/bin/phpunit:0
0.0209 1038200 2. PHPUnit_TextUI_Command::main() /home/travis/.phpenv/versions/5.4.37/bin/phpunit:722
0.0209 1044680 3. PHPUnit_TextUI_Command->run() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/TextUI/Command.php:104
0.0209 1045112 4. PHPUnit_TextUI_Command->handleArguments() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/TextUI/Command.php:114
0.0281 1812016 5. PHPUnit_Util_Configuration->getTestSuiteConfiguration() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/TextUI/Command.php:664
0.0281 1812928 6. PHPUnit_Util_Configuration->getTestSuite() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Configuration.php:814
0.0318 2063368 7. PHPUnit_Framework_TestSuite->addTestFiles() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Configuration.php:901
0.1145 6533504 8. PHPUnit_Framework_TestSuite->addTestFile() /home/travis/build/ConnectCorp/nexmo-client/vendor/phpunit/phpunit/src/Framework/TestSuite.php:403
0.1145 6571744 9. PHPUnit_Util_Fileloader::checkAndLoad() /home/travis/build/ConnectCorp/nexmo-client/vendor/phpunit/phpunit/src/Framework/TestSuite.php:331
0.1146 6571880 10. PHPUnit_Util_Fileloader::load() phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Fileloader.php:42
0.1148 6681536 11. include_once('/home/travis/build/ConnectCorp/nexmo-client/tests/Service/VoiceTest.php') phar:///home/travis/.phpenv/versions/5.4.37/bin/phpunit/phpunit/Util/Fileloader.php:58
PHPUnit 4.8.6 by Sebastian Bergmann and contributors.
............................................................... 63 / 117 ( 53%)
......................................................
Time: 511 ms, Memory: 13.00Mb
OK (117 tests, 210 assertions)
https://travis-ci.org/ConnectCorp/nexmo-client/jobs/79275172
我预计它会失败并且 travis 报告构建失败,但它只是默默地通过了。是否缺少任何 phpunit 配置选项?
当前的 phpunit 配置是这样的:
<?xml version="1.0" encoding="utf-8"?>
<phpunit colors="true"
bootstrap="./vendor/autoload.php"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
stopOnFailure="false">
<testsuites>
<testsuite name="Nexmo Test Suite">
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<blacklist>
<directory suffix=".php">vendor/*</directory>
</blacklist>
</filter>
</phpunit>
即使有错误,实际上没有测试失败,所以 phpunit 将 return 一个成功代码。
在 运行 测试之前,phpunit 首先加载并解析 *Test.php
文件,这就是错误的来源,而不是测试方法本身。
将配置选项 stopOnFailure="false"
更改为 stopOnFailure="true"
或 stopOnError="true"
应该会使此任务失败。
--stop-on-error Stop execution upon first error.
--stop-on-failure Stop execution upon first error or failure.
编辑
实际上,只是在玩这个,因为它是一个通知,在测试实际开始之前,这些标志不会有任何效果。
您似乎在 phpunit 中发现了一个错误,我建议您将其报告给 their repository。
只有在测试 class 中触发通知时才会出现问题。您的模拟 classes 与测试 class 在同一文件中定义。如果您将它们移到自己的文件中,测试将按预期开始失败。方法需要与其父方法具有相同的签名。
可能还值得在您的 phpunit.xml
中配置错误报告以报告所有错误(尽管仅此一项并不能解决您当前的问题,但无论环境如何配置,错误报告都将启用):
<php>
<ini name="error_reporting" value="-1" />
</php>