2017-08-10 3 views
0

スローされた例外に対して任意のアサーションを実行すると、メッセージやコード以外の情報を処理する場合に便利です。予期しない例外に対して任意のアサーションを実行するための優れた解決策はありますか?

は、より単純な読みやすい、または次の例ではよりそれをするより「PHPUnitの推奨方法」、あります:

public function testTitleShouldNotAcceptArrayAsValue() 
{ 
    /* Arrange */ 
    $schema = new sch\ObjectSchema(); 


    /* Expect */ 
    $this->expectException(sch\Exception::class); 


    try { 
     /* Act */ 
     $schema->title = []; 
    } catch (sch\Exception $exception) { 
     /* Assert */ 
     $this->assertEquals('title', $exception->getProperty()); 
     $this->assertEquals(
      [ 
       'properties' => [ 
        'title' => [ 
         'type' => 'string' 
        ] 
       ] 
      ], 
      $exception->getRules() 
     ); 
     throw $exception; 
    } 
} 

答えて

2

あなたは例外オブジェクトに追加情報を入れている場合、およびそれが設定されていることをテストで証明したい場合は、try/catchを使用します。

IMO、expectException()と再throwは、しかし、冗長です。キャッチの終わりには、パスのある関数から戻り、キャッチブロックが失敗した後($this->fail('sch\Exception was not thrown');)、キャッチする例外はなく、計画通りでした。

はやっていたことを完全には明らかであろう - と明快さは優雅さよりも、多くの時間、より有用です。

関連する問題