2014-07-21 1 views
1

Je suppose que c'est un problème courant mais je suis incapable de décider comment résoudre ce problème.PHPUnit testant un flux d'exécution d'exception

J'ai une fonction publique qui a 4 blocs catch. A l'intérieur de chaque bloc de capture l'une des méthodes privées est appelée ci-dessous

public function updateInformation(){ 

try{ 
    ..... 
    }catch(Zend_Http_Client_Exception $e){ 
    $this->somePrivateMethod1(); 
    }catch(Zend_Service_Exception $e){ 
    $this->somePrivateMethod2(); 
    }catch(UnexpectedValueException $e){ 
    $this->somePrivateMethod3(); 
    }catch(Exception $e){ 
    $this->somePrivateMethod4(); 
    } 

} 

Je suis en train d'écrire cas de test pour tester la fonction updateInformation(). Je voudrais aussi tester les blocs d'exception qui me permettraient de tester les méthodes privées (aussi). Comment puis-je y parvenir? Pour cette raison, la couverture de code est également parti pour un tirage au sort.

+0

J'ai fourni une réponse qui décrit les bases de ce que vous devez faire. Mais plus d'informations sur la classe que vous testez contribuerait à fournir une réponse plus détaillée. – Schleis

Répondre

0

Vous avez une de vos dépendances jeter l'exception afin que votre code l'attrape.

http://phpunit.de/manual/current/en/phpunit-book.html#test-doubles.stubs.examples.StubTest8.php

public function testThrowExceptionStub() 
    { 
     // Create a stub for the SomeClass class. 
     $stub = $this->getMock('SomeClass'); 

     // Configure the stub. 
     $stub->method('doSomething') 
      ->will($this->throwException(new Exception)); 

     $sut = new Class($stub); 

     $sut->updateInformation(); 

     //DO MORE ASSERTIONS ABOUT BEHAVIOR IN PRIVATE METHODS 

    } 
} 

Je suppose qu'il ya quelque chose dans le bloc try qui devra être moqué. Si ce n'est pas le cas, vous définissez la classe afin que les conditions soient remplies de sorte que les exceptions seront levées.

Questions connexes