2017-08-10 1 views
0

Il peut être utile de faire des assertions arbitraires sur une exception levée lorsqu'elle traite d'autres informations qu'un message ou un code.Meilleure solution pour faire des assertions arbitraires sur une exception attendue?

est-il un plus « méthode recommandée phpunit- » simple, lisible, ou plus de le faire, que dans l'exemple suivant:

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

Répondre

2

Si vous mettez des informations supplémentaires dans l'objet d'exception, et vouloir prouver dans un test qu'il est en train d'être défini, alors j'utiliserais l'essai/catch comme vous avez.

IMO, le expectException() et re throw est cependant redondant. À la fin de la capture, je reviendrais juste en dehors de la fonction avec la passe, et après que le bloc de capture échoue (avec $this->fail('sch\Exception was not thrown');) car il n'y avait pas d'exception à attraper, comme prévu.

Il serait tout à fait évident que c'était le cas - et la clarté est plus utile, la plupart du temps, que l'élégance.