2017-02-01 3 views
1

Ich sehe viele Antworten darüber, wie man mit PHPUnit testen kann, ob eine Ausnahme für eine Methode ausgelöst wird - das ist großartig und gut.Wie prüfe ich die Ausnahme * handling * in PHPUnit?

Für diesen Code habe ich verstanden, dass @expectsException es mir erlaubt, den try {} -Block und ding1() zu testen. Wie teste ich die Bits thing2() und thing3()?

try { 
thing1(); 
} 
catch (Exception $e) { 
thing2(); 
thing3(); 
} 

Hier ist, was ich habe jetzt das fehlschlägt:

function myTest() { 
    $prophecy = $this->prophesize(Exception::CLASS); 
    $my_exception = $prophecy->reveal(); 

    // more testing stuff 
    ... 
} 

PHPUnit die reveal() Ruf als eine unerwartete Ausnahme sieht, und beendet, bevor „mehr Tests stuff“.

+0

einen Test machen, dass die Ausnahme auslöst – Andy

Antwort

1

The annotationexpectedException wird verwendet, um zu erklären, dass der Test mit unbehandelter Ausnahme beendet wird.

In Ihrem Fall als Ancy C, bemerkte thing1() muss jede Ausnahme werfen und dann thing2() und thing3() wird aufgerufen, und Sie können sie testen.


Edit:

Sie haben einen Fehler irgendwo haben muss. Dies funktioniert perfekt für mich

<?php 

class Stack 
{ 
    public function testMe() 
    { 
     try { 
      $this->thing1(); 
     } catch (Exception $e) { 
      return $this->thing2(); 
     } 
    } 

    private function thing1() 
    { 
     throw new Exception(); 
    } 

    private function thing2() 
    { 
     return 2; 
    } 
} 

Und Testklasse:

class StackTest extends TestCase 
{ 
    public function test() 
    { 
     $stack = new Stack(); 
     $result = $stack->testMe(); 

     self::assertEquals(2, $result); 
    } 
} 

Ergebnis:

PHPUnit 5.5.4 by Sebastian Bergmann and contributors. 

.                 1/1 (100%) 

Time: 20 ms, Memory: 4.00MB 

OK (1 test, 1 assertion) 
+0

Wenn thing1() eine Ausnahme auslöst, phpunit sieht Es ist ein Fehler und beendet, anstatt zur catch() -Anweisung überzugehen. Wie komme ich hier zurecht? – aaronbauman

+0

@Aaronbauman Ich habe ein funktionierendes Beispiel hinzugefügt. Versuche, etwas Ähnliches zu tun. –

+0

OK, danke für das Beispiel. Ich werde es weiter versuchen. – aaronbauman