2012-12-05 72 views
9

我想繼續在嚴格模式下運行我的單元測試,以便我很容易地知道任何異常長的測試,但同時默認超時1秒不是足夠。我可以更改所有測試嗎?我知道我可以使用@short/@medium/@long註釋爲每個類(和單個測試)設置超時,但是對於所有測試,是否有類似的情況?也許在phpunit.xml中?PHPUnit嚴格模式 - 如何更改默認超時

這是爲了避免偶爾發生的PHP_Invoker_TimeoutException: Execution aborted after 1 second

+0

可能重複:http://stackoverflow.com/questions/10520464/what-does-phpunit-strict-mode-做 – Smar

+0

我已經看過,但它不回答如何全局更改此設置 - 不編輯PHPUnit源代碼,我想避免。 –

+0

您只能從phpunit.xml執行此操作。就我所知,PHPUnit沒有全局配置文件。 – Smar

回答

25

該選項可以通過在phpunit.xml中設置想要的時間來啓用。時間在幾秒鐘內。

實施例:

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

測試可以被標記爲通過標記實際測試功能,如以下

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

EDIT中型或大型:modern PHPUnit versions不做這些超時任何更多,並且也改變嚴格模式的行爲通常通過爲每個事物引入單獨的標誌previously covered by strict mode

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

無關的警告:它還將XML配置中的測試路徑更改爲相對於XML配置文件,而不是舊的默認路徑將與當前工作目錄相關。

5

另外,您還可以設置他們在您的設置()方法是這樣的:

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