2017-02-01 7 views
1

PHPUnitを使用してメソッドに例外がスローされたかどうかをテストする方法については、多くの回答があります。PHPUnitでexception * handling *をテストするにはどうすればよいですか?

このコードでは、@expectsExceptionがtry {}ブロックとthing1()をテストできることを理解しています。 thing2()thing3()ビットをテストするにはどうすればよいですか?

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

    // more testing stuff 
    ... 
} 

、PHPUnitが予期しない例外としてreveal()コールを見て、「より多くのテストのもの」の前に終了します。

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

は、ここで私はそれが失敗し、今持っているものです。

+0

を例外 – Andy

答えて

1

The annotationexpectedExceptionは、そのテストはが完了したことを宣言するために使用されます。処理されない例外があります。アンシーCが気づいたとして、あなたの場合は

は、 thing1()は、任意の例外をスローする必要があり、その後 thing2()thing3()が呼び出されます、あなたはそれらをテストすることができます。


編集:

あなたがどこかにエラーがなければなりません。これは私

<?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; 
    } 
} 

そして、テストクラスのために完璧に働いている:

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

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

結果:

PHPUnit 5.5.4 by Sebastian Bergmann and contributors. 

.                 1/1 (100%) 

Time: 20 ms, Memory: 4.00MB 

OK (1 test, 1 assertion) 
+0

thing1()が例外をスローすると、PHPUnitのは見をトリガーテストを行いますcatch()ステートメントに移動するのではなく、失敗として終了します。これをどうやって回避するのですか? – aaronbauman

+0

@aaronbauman私はいくつかの実際の例を追加しました。同様のことをやろうとしてください。 –

+0

OK、この例をありがとうございます。私は試し続けます。 – aaronbauman

関連する問題