我想继续在严格模式下运行我的单元测试,以便我能够轻松地知道任何特别长的测试,但同时默认超时1s是不够的。我可以为所有测试更改它吗?我知道我可以使用@short / @medium / @long
注释为每个类(以及单个测试)设置超时,但对于所有测试是否都有类似的东西?也许在phpunit.xml中?
这是为了避免偶尔发生的PHP_Invoker_TimeoutException: Execution aborted after 1 second
。
答案 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);