我想继续在严格模式下运行我的单元测试,以便我很容易知道任何特别长的测试,但同时默认超时 1s 是不够的。我可以为所有测试更改它吗?我知道我可以使用@short / @medium / @long
注释为每个类(和单个测试)设置超时,但是所有测试都有类似的东西吗?也许在phpunit.xml?
这是为了避免偶尔发生PHP_Invoker_TimeoutException: Execution aborted after 1 second
。
在phpunit.xml中设置所需时间来启用该选项。时间以秒为单位。
例:
<phpunit
strict="true"
timeoutForSmallTests="1"
timeoutForMediumTests="5"
timeoutForLargeTests="10"
>
// test suites
</phpunit>
可以通过标记实际测试功能将测试标记为中型或大型,如下所示
/**
* @medium
*/
public function testTestThing() {
$this->assertTrue(false);
}
编辑:现代PHPUnit版本不再执行这些超时,并且通常通过为严格模式之前涵盖的每个事物引入单独的标志来更改严格模式的行为:
beStrictAboutTestsThatDoNotTestAnything="true"
checkForUnintentionallyCoveredCode="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTestSize="true"
beStrictAboutChangesToGlobalState="true"
不相关的警告:它还将 XML 配置中测试的路径更改为相对于 XML 配置文件,而不是相对于当前工作目录的旧默认值。
您也可以在setUp()方法中设置它们,如下所示:
$this->getTestResultObject()->setTimeoutForSmallTests(1);
$this->getTestResultObject()->setTimeoutForMediumTests(5);
$this->getTestResultObject()->setTimeoutForLargeTests(10);