2012-04-20 3 views
50

Sto usando phpunit in connessione con Jenkins, e voglio saltare alcuni test impostando la configurazione nel file XML phpunit.xmlCome saltare i test in PHPunit?

So che posso usare sulla riga di comando:

phpunit --filter testStuffThatBrokeAndIOnlyWantToRunThatOneSingleTest

come si traduce nel file XML poiché il tag <filters> è solo per la copertura del codice?

Vorrei eseguire tutti i test a parte testStuffThatAlwaysBreaks

+1

KO: che ne dici di fissare il test? btw, ciao da welly ;-) – zerkms

+0

Non ho scritto i test, è qualcosa di irrilevante, e inoltre non voglio cambiare i file core – Filype

+0

Sicuramente puoi farlo. È un requisito molto strano – zerkms

risposta

92

Il modo più semplice e veloce per saltare i test che sono o rotto o avete bisogno di continuare a lavorare in un secondo momento è quello di aggiungere solo quanto segue alla parte superiore del vostro unit test individuale:

$this->markTestSkipped('must be revisited.'); 
+0

puoi sempre aggiungere directory o test al file di configurazione xml, tuttavia, se questo è un controller o simile, non è molto pratico perché probabilmente hai dozzine di altri test in quel file. Immagino che se non hai accesso ai test unitari, non capisco perché capisco perché, quindi non hai altra scelta che escludere. – jsteinmann

+3

Poiché si tratta di un metodo statico (almeno in PHPUnit 3), e alcune classi usano l'afaik del binding statico avanzato, si dovrebbe usare 'static :: markTestSkipped ('');' invece di '$ this->'. Genererà un avviso nelle versioni PHP più recenti. Firma: 'public static function markTestSkipped ($ message = '')' – DanFromGermany

+0

Richiede un esempio migliore del file di test dell'unità completa. Non solo un frammento. – Ligemer

21

Se si può trattare con ignorando l'intero file poi

<?xml version="1.0" encoding="UTF-8"?> 

<phpunit> 

    <testsuites> 
     <testsuite name="foo"> 
      <directory>./tests/</directory> 
      <exclude>./tests/path/to/excluded/test.php</exclude> 
       ^------------- 
     </testsuite> 
    </testsuites> 

</phpunit> 
+0

Questo è quello che ho provato, continua a dire 893 test senza i test '' e 893 con '' – Filype

+0

I test durano circa 20 minuti, c'è un modo semplice per vedere quanti test eseguirà? al momento, devo aspettare che la prima riga sia completata '....... 63/893 (7%)' – Filype

+3

@Filype: allora probabilmente hai specificato il percorso sbagliato. Funziona bene per me. Non sono sicuro se è possibile contare i test. PS: i test unitari non dovrebbero funzionare così a lungo. Ti consiglio di utilizzare annotazioni '@ group' e split test per loro natura – zerkms

8

a volte è utile per saltare tutto TE vs da un particolare file basato su condizioni personalizzate definite come codice php. Puoi farlo facilmente usando la funzione setUp in cui funziona anche makeTestSkipped.

protected function setUp() 
{ 
    if (Config::getInstance()->myConfigCondition == false) { 
     $this->markTestSkipped('all tests in this file are invactive for this server configuration!'); 
    } 
} 

Btw phpunit 5.2 stabile official documentation suggerisce che si dovrebbe usare markTestSkipped come metodo di istanza, non è un metodo statico. Non ho controllato se la definizione è stata modificata lungo il percorso.

+0

Che cos'è una classe '' 'Config'''? Dove lo metto? – cronfy

+0

@cronfy può essere qualsiasi classe accessibile a livello globale (modello di progettazione Singleton/Register) o anche variabile globale impostata nel file bootstrap in phpunit. Fondamentalmente la logica è: if ($ testsFromThisFileShouldBeSkipped) {$ this-> markTestSkipped (...); } –