2012-12-05 24 views
9

Vorrei continuare a eseguire i miei test di unità in modalità rigorosa in modo da rendere facilmente conto di eventuali test eccezionalmente lunghi, ma allo stesso tempo il timeout predefinito di 1s non è abbastanza. Posso cambiarlo per tutti i test? So che posso impostare il timeout per ciascuna classe (e singoli test) usando le annotazioni @short/@medium/@long, ma c'è qualcosa del genere per tutti i test? Forse in phpunit.xml?PHPUnità della modalità rigorosa - come modificare il timeout predefinito

Questo è per evitare PHP_Invoker_TimeoutException: Execution aborted after 1 second che si verifica una volta ogni tanto.

+0

Eventuali duplicati: http://stackoverflow.com/questions/10520464/what-does-phpunit-strict-mode- do – Smar

+0

L'ho visto, ma non risponde a come cambiare questa impostazione globalmente - senza modificare il codice sorgente di PHPUnit, che vorrei evitare. –

+0

Puoi farlo solo da phpunit.xml. Non esiste un file di configurazione globale per PHPUnit per quanto ne so. – Smar

risposta

25

L'opzione può essere attivata impostando i tempi desiderati in phpunit.xml. I tempi sono in secondi.

Esempio:

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

test possono essere contrassegnati come media o grande contrassegnando funzioni effettive test come segue

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

EDIT: cambia modern PHPUnit versions non fa questi timeout più, e anche il comportamento della modalità rigorosa generalmente introducendo flag separati per ogni cosa previously covered by strict mode:

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

Avviso non correlato: modifica anche i percorsi dei test nella configurazione XML in modo che siano relativi al file di configurazione XML, diversamente dal vecchio valore predefinito che i percorsi devono essere relativi alla directory di lavoro corrente. Metodo

5

In alternativa è possibile impostare anche nel vostro setup() in questo modo:

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