<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class DatabaseTest extends TestCase
{
public function testAdd(): void
{
$db=new Database();
$result=$db->add();
$this->assertEquals($result,"add success");
}
}
这个测试代码调用被测试代码进行断言,本来应该是没有问题的。
C:\Users\Administrator\PhpstormProjects\untitled\organizing>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar --testsuite database --disallow-test-output
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
...R 4 / 4 (100%)test
Time: 00:00.006, Memory: 20.00 MB
There was 1 risky test:
1) DatabaseTest::testAdd
Warning: include(PHPUnit\Composer\Autoload\ClassLoader.php): failed to open stream: No such file or directory in C:\Users\Administrator\PhpstormProjects\untitled\organizing\src\autoload.php on line 3
Call Stack:
0.0142 1571520 1. {main}() D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar:0
0.1333 18893400 2. PHPUnit\TextUI\Command::main(???) D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar:2249
0.1333 18893512 3. PHPUnit\TextUI\Command->run(array(4), true) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/Command.php:93
0.1403 19323960 4. PHPUnit\TextUI\TestRunner->run(class PHPUnit\Framework\TestSuite, array(17), array(0), true) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/Command.php:124
0.1825 19366136 5. PHPUnit\TextUI\DefaultResultPrinter->printResult(class PHPUnit\Framework\TestResult) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/TestRunner.php:496
0.1827 19366160 6. PHPUnit\TextUI\DefaultResultPrinter->printRisky(class PHPUnit\Framework\TestResult) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:155
0.1827 19366160 7. PHPUnit\TextUI\DefaultResultPrinter->printDefects(array(1), string(10)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:311
0.1859 19366160 8. PHPUnit\TextUI\DefaultResultPrinter->printDefect(class PHPUnit\Framework\TestFailure, long) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:272
0.1864 19366160 9. PHPUnit\TextUI\DefaultResultPrinter->printDefectTrace(class PHPUnit\Framework\TestFailure) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:279
0.1864 19366160 10. PHPUnit\Framework\OutputError->__toString() phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:288
0.1865 19366216 11. PHPUnit\Util\Filter::getFilteredStacktrace(class PHPUnit\Framework\OutputError) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Framework/Exception/Exception.php:58
0.1865 19367352 12. PHPUnit\Util\Filter::shouldPrintFrame(array(2), string(25), class PHPUnit\Util\ExcludeList) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/Filter.php:57
0.1865 19367496 13. PHPUnit\Util\Filter::fileIsExcluded(string(101), class PHPUnit\Util\ExcludeList) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/Filter.php:76
0.1865 19367496 14. PHPUnit\Util\ExcludeList->isExcluded(string(101)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/Filter.php:80
0.1865 19367496 15. PHPUnit\Util\ExcludeList->initialize() phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:166
0.1865 19367496 16. class_exists(string(37)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:182
0.1865 19367560 17. spl_autoload_call(string(37)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:182
0.1866 19367624 18. autoload(string(37)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:182
Warning: include(): Failed opening 'PHPUnit\Composer\Autoload\ClassLoader.php' for inclusion (include_path='.;C:\php\pear') in C:\Users\Administrator\PhpstormProjects\untitled\organizing\src\autoload.php on line 3
Call Stack:
0.0142 1571520 1. {main}() D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar:0
0.1333 18893400 2. PHPUnit\TextUI\Command::main(???) D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar:2249
0.1333 18893512 3. PHPUnit\TextUI\Command->run(array(4), true) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/Command.php:93
0.1403 19323960 4. PHPUnit\TextUI\TestRunner->run(class PHPUnit\Framework\TestSuite, array(17), array(0), true) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/Command.php:124
0.1825 19366136 5. PHPUnit\TextUI\DefaultResultPrinter->printResult(class PHPUnit\Framework\TestResult) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/TestRunner.php:496
0.1827 19366160 6. PHPUnit\TextUI\DefaultResultPrinter->printRisky(class PHPUnit\Framework\TestResult) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:155
0.1827 19366160 7. PHPUnit\TextUI\DefaultResultPrinter->printDefects(array(1), string(10)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:311
0.1859 19366160 8. PHPUnit\TextUI\DefaultResultPrinter->printDefect(class PHPUnit\Framework\TestFailure, long) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:272
0.1864 19366160 9. PHPUnit\TextUI\DefaultResultPrinter->printDefectTrace(class PHPUnit\Framework\TestFailure) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:279
0.1864 19366160 10. PHPUnit\Framework\OutputError->__toString() phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/TextUI/DefaultResultPrinter.php:288
0.1865 19366216 11. PHPUnit\Util\Filter::getFilteredStacktrace(class PHPUnit\Framework\OutputError) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Framework/Exception/Exception.php:58
0.1865 19367352 12. PHPUnit\Util\Filter::shouldPrintFrame(array(2), string(25), class PHPUnit\Util\ExcludeList) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/Filter.php:57
0.1865 19367496 13. PHPUnit\Util\Filter::fileIsExcluded(string(101), class PHPUnit\Util\ExcludeList) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/Filter.php:76
0.1865 19367496 14. PHPUnit\Util\ExcludeList->isExcluded(string(101)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/Filter.php:80
0.1865 19367496 15. PHPUnit\Util\ExcludeList->initialize() phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:166
0.1865 19367496 16. class_exists(string(37)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:182
0.1865 19367560 17. spl_autoload_call(string(37)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:182
0.1866 19367624 18. autoload(string(37)) phar://D:/phpstudy_pro/Extensions/php/php7.3.4nts/phpunit-9.5.8.phar/phpunit/Util/ExcludeList.php:182
This test printed output: test
OK, but incomplete, skipped, or risky tests!
Tests: 4, Assertions: 5, Risky: 1.
那么就是因为被测试代码中有输出,所以这里同样没有通过测试。
然后将Database.php中的输出去除后:
<?php declare(strict_types=1);
final class Database
{
public function add()
{
return "add success";
}
}
再次运行就没有问题了
C:\Users\Administrator\PhpstormProjects\untitled\organizing>D:\phpstudy_pro\Extensions\php\php7.3.4nts\php.exe D:\phpstudy_pro\Extensions\php\php7.3.4nts\phpunit-9.5.8.phar --testsuite database --disallow-test-output
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
.... 4 / 4 (100%)
Time: 00:00.006, Memory: 20.00 MB
OK (4 tests, 5 assertions)
beStrictAboutOutputDuringTests
测试执行期间产生的输出要进行严格检查以抛出错误,除了用phpunit命令上添加--disallow-test-output参数外,也同样可以直接配置beStrictAboutOutputDuringTests
为true于phpunit.xml的配置文件中:
phpunit.xml:
<phpunit bootstrap="src/autoload.php" beStrictAboutTestsThatDoNotTestAnything="false" beStrictAboutOutputDuringTests="true">
<testsuites>
<testsuite name="database">
<file>tests/UserTest.php</file>
<file>tests/DatabaseTest.php</file>
</testsuite>
</testsuites>
</phpunit>
然后phpunit命令上不用添加--disallow-test-output参数也同样能生效对于测试执行期间产生的输出的检查并在出现有输出的时候抛出错误。
最后再补充点,对于输出,这里不仅仅只能理解为echo,像是print也同样是输出,同样会触发测试执行期间产生的输出而正好开启beStrictAboutOutputDuringTests或者加参--disallow-test-outpu时候所抛出的错误的。