2009-03-04 7 views
7

Si je me trompe, SimpleTest vous permettra d'affirmer qu'une erreur PHP est levée. Cependant, je ne peux pas comprendre comment l'utiliser, basé sur la documentation. Je veux affirmer que l'objet que je passe dans mon constructeur est une instance de MyOtherObjectSimpleTest: Comment affirmer qu'une erreur PHP est levée?

class Object { 
    public function __construct(MyOtherObject $object) { 
     //do something with $object 
    } 
} 

//...and in my test I have... 
public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
    $this->expectError($object); 
} 

Où vais-je tort?

Répondre

13

L'indication de type lance E_RECOVERABLE_ERROR qui peut être capturée par SimpleTest depuis PHP version 5.2. Ce qui suit attrapera toute erreur contenant le texte "doit être une instance de". Le constructeur de PatternExpectation prend un regex perl.

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $this->expectError(new PatternExpectation("/must be an instance of/i")); 
    $object = new Object($notAnObject); 
} 
+0

Je n'ai pas vérifié cela, donc je suppose seulement que c'est vrai. Merci pour votre réponse! – Andrew

2

PHP a des erreurs et des exceptions, qui fonctionnent légèrement différemment. Le passage d'un type incorrect à une fonction typée provoquera une exception. Vous devez attraper cela dans votre cas de test. Par exemple .:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    try { 
    $object = new Object($notAnObject); 
    $this->fail("Expected exception"); 
    } catch (Exception $ex) { 
    $this->pass(); 
    } 
} 

ou simplement:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $this->expectException(); 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
} 

Mais notez que ce arrêtera le test après la ligne où l'exception se produit.

+1

Je ne vous ai pas donné un vote négatif. Mais, je pense que je devrais mentionner pourquoi je pense que quelqu'un l'aurait downvoted: Cette réponse concerne les «exceptions», pas les «erreurs». Lorsqu'un indice de type prend le mauvais type, il lance une erreur et non une exception. –

1

vous devez vous attendre à l'erreur avant qu'elle ne se produise, alors SimpleTest l'avale et compte une passe, si le test arrive à la fin et qu'il n'y a pas d'erreur, alors il échouera. (Il y a expectError et expectException qui agissent de la même manière, pour les erreurs PHP (non fatales) et les exceptions, respectivement.)

2

Il s'avère que SimpleTest ne supporte pas cela. Vous ne pouvez pas détecter les erreurs PHP fatales dans SimpleTest. Type hinting est génial, sauf que vous ne pouvez pas le tester. L'indication de type jette des erreurs PHP fatales.

+2

À partir de la version PHP 5.2, SimpleTest peut capturer les erreurs d'indication de type. Vois ma réponse. –

Questions connexes