2010-11-30 50 views
2

Je suis nouveau à des tests unitaires et ont écrit le test suivant:Test de multiples exceptions avec PHPUnit

/** 
* @expectedException Exception 
*/ 
public function testCantGetInvalidCampsite() { 
    $invalidIds = array(300000, "string"); 
    foreach($invalidIds as $id) { 
     $this->campsites->getCampsite($id); // will throw an exception 
    } 
} 

Je ne suis pas sûr que si cela teste effectivement tous les ids invalides, ou tout simplement arrêter comme Dès qu'il atteint la première exception. Est-ce ainsi que je devrais tester plusieurs exceptions ou dois-je le diviser en plusieurs tests différents, ou y a-t-il un autre moyen de le faire?

En outre, si mon message d'exception est généré dynamiquement, par exemple "Impossible de récupérer l'enregistrement avec l'ID 30000", comment puis-je tester que le bon message dynamique est en cours de production?

Répondre

1

Vous pouvez essayer d'attraper les exceptions, les compter et échouer le test si le nombre d'exceptions attendues ne correspond pas au nombre d'exceptions rencontrées. De

Vous pouvez également récupérer le message de l'exception, si vous en rencontrez un, et vérifiez s'il est correct.

Dans le code:

public function testCantGetInvalidCampsite() { 
    $invalidIds = array(300000, "string"); 
    $exceptionCount = 0; 

    foreach($invalidIds as $id) { 

     try { 
      $this->campsites->getCampsite($id); // will throw an exception 
     } catch (Exception $e) 
      $exceptionCount ++; 
      $this->assertEquals('my exception message', $e->getMessage()); 
     } 
    } 

    // assert here that exception count is two 
    $this->assertEquals(2, $exceptionCount); 
} 

Le plus propre, à mon avis, de le faire serait d'ajouter deux TestCases ...

testCantGetInvalidCampSite_String() 
testCantGetInvalidCampSite_InvalidId() 

si vous voyez instantanément ce qui échoue si le test échoue .

10

L'approche que je l'utilise dans cette situation avec PHPUnit dataProviders:

class MyTest extends PHPUnit_Framework_TestCase 
{ 
    public function invalidIds() 
    { 
     return array(
      array(300000), 
      array("string") 
     ); 
    } 


    /** 
    * @dataProvider invalidIds 
    * @expectedException Exception 
    */ 
    public function testCantGetInvalidCampsite($invalidId) 
    { 
     $this->campsites->getCampsite($invalidId); // will throw an exception 
    } 
}