PHPUnit严格模式 - 如何更改默认超时

时间:2012-12-05 11:21:04

标签: php timeout phpunit

我想继续在严格模式下运行我的单元测试,以便我能够轻松地知道任何特别长的测试,但同时默认超时1s是不够的。我可以为所有测试更改它吗?我知道我可以使用@short / @medium / @long注释为每个类(以及单个测试)设置超时,但对于所有测试是否都有类似的东西?也许在phpunit.xml中?

这是为了避免偶尔发生的PHP_Invoker_TimeoutException: Execution aborted after 1 second

2 个答案:

答案 0 :(得分:26)

可以通过在phpunit.xml中设置所需时间来启用该选项。时间只有几秒钟。

示例:

<phpunit
    strict="true"
    timeoutForSmallTests="1"
    timeoutForMediumTests="5"
    timeoutForLargeTests="10"
>
 // test suites
</phpunit>

通过标记实际测试功能,可以将测试标记为中等或大,

/**
 * @medium
 */
public function testTestThing() {
     $this->assertTrue(false);
}

编辑:modern PHPUnit versions不再执行这些超时,并且通常通过为每件事previously covered by strict mode引入单独的标志来更改严格模式的行为:

beStrictAboutTestsThatDoNotTestAnything="true"
checkForUnintentionallyCoveredCode="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutTestSize="true"
beStrictAboutChangesToGlobalState="true"

无关警告:它还将XML配置中测试的路径更改为相对于XML配置文件,而不是旧的默认路径是相对于当前工作目录。

答案 1 :(得分:5)

或者您也可以在setUp()方法中设置它们,如下所示:

$this->getTestResultObject()->setTimeoutForSmallTests(1);
$this->getTestResultObject()->setTimeoutForMediumTests(5);
$this->getTestResultObject()->setTimeoutForLargeTests(10);