2016-11-10 1 views
3

Ich schreibe Komponententests, um die Funktionalität von zwei Bibliotheken zu validieren ist das gleiche. Im Wesentlichen, Testen einer Schnittstelle.PHPUnit Assert Eines von zwei möglichen Ergebnissen

Allerdings in einigen Tests zur Fehlerbehandlung. Die Fehlerstufe ist unterschiedlich und muss unterschiedlich sein, weil zum Beispiel E_WARNING und die andere nur E_USER_WARNING generieren kann.

So ist die Frage. Gibt es eine Behauptung in der PHP-Einheit, die sagen kann, dass der Fehler eines von zwei möglichen Ergebnissen sein muss? Etwas wie:

assertIsIn(array(E_WARNING, E_USER_WARNING), $generatedError); 

Ich weiß, dass ich wahrscheinlich um es funktionieren könnte durch die erwarteten und tatsächlichen Antworten über in assertContains Swapping() oder möglicherweise einige vorge behaupten Manipulation der Ergebnisse. Aber gibt es einen saubereren Ansatz?

Antwort

3

Wahrscheinlich können Sie mit der assertContains Methode implementieren (stellt fest, dass ein Heuhaufen eine Nadel enthält). Als Beispiel:

public function testAssertIsIn() 
{ 
    $errorLevel = array(E_WARNING, E_USER_WARNING); 

    $generatedError = E_WARNING; 
    $this->assertContains($generatedError, $errorLevel); 

    $generatedError = E_USER_WARNING; 
    $this->assertContains($generatedError, $errorLevel); 
} 

Hope this Hilfe

+0

Gute Antwort, hand't Ich entdeckte, dass AssetContains Syntax ist Nadel/Heuhaufen anstelle von erwartet/tatsächlich in den Parametern. –

1
$this->logicalOr($this->identicalTo(E_WARNING), $this->identicalTo(E_USER_WARNING)); 

Wenn Sie saubereren Code möchten, können Sie sie in eine benutzerdefinierte Behauptung drehen:

public static function assertOneOf(array $expected, $actual, $message = '') { 
    $constraints = []; 
    foreach ($expected as $expectedValue) { 
     $constrains[] = new PHPUnit_Framework_Constraint_IsIdentical($expectedValue); 
    } 
    $constraint = new PHPUnit_Framework_Constraint_Or; 
    $constraint->setConstraints($constraints); 
    self::assertThat($actual, $constraints, $message); 
} 
Verwandte Themen