2013-08-15 7 views
10

Ich bin auf der Suche nach einer Möglichkeit, einen Testfall mehrere Male mit unterschiedlichen Einstellungen zu starten.Einen PHPUnit Testfall mehrmals ausführen

Ich teste eine Datenbankzugriffsklasse (Dutzende von Testmethoden) und möchte es im "normalen Modus" und dann im "Debug-Modus" testen. Beide Modi müssen die gleichen Testergebnisse liefern.

Gibt es eine Möglichkeit, dies in der Testfalleinstellung zu tun? Oder die run() Methode überschreiben? Ich möchte nicht, den Test zweimal schreiben, natürlich :)

Danke

bearbeiten: GOT IT!

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

Schauen Sie sich '@ dataProvider'-Funktionen an, die Testdatensätze ausgeben. – Sven

+0

Ich kenne die Verwendung DataProviders :) Ich möchte nur eine einfache Einstellung der Klasse ändern und dann einfach alle Testmethoden erneut ausführen. Etwas wie: run(); $ class-> setDebug (true); Lauf(); –

+0

Ok, ich nehme an, das ist dann nicht der übliche Fall. Haben Sie versucht, die ursprüngliche Testklasse zu erweitern und die eine Sache in 'setUp()' zu ändern? Dies sollte den gesamten Testcode unter einem neuen Label erben und das Zeug zweimal ausführen. – Sven

Antwort

-1

PHPUnit bietet Testdekorateure an. Die documentation hat eigentlich einen wiederholenden Dekorator als Beispiel, was man mit einem Dekorateur machen soll. Der Dekorator wäre die perfekte Möglichkeit, das Verhalten wiederverwendbar zu implementieren, ohne von Unterklassen abhängig zu sein. PHPUnit_Framework_TestCase.