2013-08-15 14 views
10

Sto cercando un modo per eseguire più volte una prova con impostazioni diverse.Esecuzione di un testcase PHPUnit più volte

Sto testando una classe di accesso al database (decine di metodi di test) e voglio testarlo in "modalità normale" e quindi in "modalità di debug". Entrambe le modalità devono produrre gli stessi risultati del test.

Esiste la possibilità di farlo nell'impostazione del testcase? O sovrascrivere il metodo run()? Non voglio scrivere il test due volte, ovviamente :)

Grazie

Edit: Ci sono!

public function run(PHPUnit_Framework_TestResult $result = NULL) 
{ 
    if ($result === NULL) { 
     $result = $this->createResult(); 
    } 

    /** 
    * Run the testsuite multiple times with different debug level 
    */ 
    $this->debugLevel = 0; 
    print "Setting debug level to: " . $this->debugLevel . PHP_EOL; 
    $result->run($this); 

    $this->debugLevel = 8; 
    print "Setting debug level to: " . $this->debugLevel . PHP_EOL; 
    $result->run($this); 

    $this->debugLevel = 16; 
    print "Setting debug level to: " . $this->debugLevel . PHP_EOL; 
    $result->run($this); 

    return $result; 
} 

public function setUp() 
{ 
    parent::setUp(); 
    $this->myclass->setOptions('debug', $this->debugLevel); 
} 
+8

Dai un'occhiata alle funzioni di '@ dataProvider' che emettono i set di dati di test. – Sven

+0

Conosco i dati di utilizzoProvider :) Voglio solo modificare una semplice impostazione della classe e quindi eseguire semplicemente TUTTI i metodi di prova. Qualcosa come: run(); $ Classe-> setDebug (true); correre(); –

+0

Ok, presumo che questo non sia il solito caso allora. Hai provato ad estendere la classe di test originale e cambiare la prima cosa in 'setUp()'. Ciò dovrebbe ereditare tutto il codice di test sotto una nuova etichetta ed eseguire il materiale due volte. – Sven

risposta

-1

PHPUnit offre decoratori di prova. Lo documentation ha in effetti un decoratore ripetuto come esempio di cosa fare con un decoratore. Il decoratore sarebbe il modo perfetto di implementare il comportamento in modo riutilizzabile senza dipendere dalla sottoclasse PHPUnit_Framework_TestCase.