用@large标注的测试方法是一个可以执行时间比较长的的测试方法,那么默认是超过60秒认为超过执行限制了。
DatabaseTest.php:
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class DatabaseTest extends TestCase
{
/*
* @large
* */
public function testAdd(): void
{
$db=new Database();
$result=$db->add();
sleep(61);
$this->assertEquals($result,"add success");
}
}
这里执行了61秒,但我正常测试,它是没有问题的虽然执行慢,但是最终还是执行下来了
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
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
.... 4 / 4 (100%)
Time: 01:01.016, Memory: 20.00 MB
OK (4 tests, 5 assertions)
这是因为没有启用时间限制,在phpunit命令中追加--enforce-time-limit参数即可形成对执行时间限制的检查。
像是这样:
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 --enforce-time-limit
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
Error: PHP extension pcntl is required for enforcing time limits
.... 4 / 4 (100%)
Time: 01:01.011, Memory: 20.00 MB
OK (4 tests, 5 assertions)
这里又提到了没有安装pcntl扩展,这里暂时先不管它。
那么除了在phpunit命令追加--enforce-time-limit参数外,也可以在phpunit.xml配置文件中追加参数enforceTimeLimit="true"来实现执行测试方法的时间限制检查。
phpunit.xml:
<phpunit bootstrap="src/autoload.php" beStrictAboutTestsThatDoNotTestAnything="false" beStrictAboutOutputDuringTests="true" enforceTimeLimit="true">
<testsuites>
<testsuite name="database">
<file>tests/UserTest.php</file>
<file>tests/DatabaseTest.php</file>
</testsuite>
</testsuites>
</phpunit>
所以此时,不用在phpunit命令中追加--enforce-time-limit参数同样也能起到检查执行测试时间限制对于某个测试方法。
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
PHPUnit 9.5.8 by Sebastian Bergmann and contributors.
Error: PHP extension pcntl is required for enforcing time limits
.... 4 / 4 (100%)
Time: 01:01.021, Memory: 20.00 MB
OK (4 tests, 5 assertions)