2009-03-04 6 views
7

Se sono corretto, SimpleTest ti consentirà di affermare un errore PHP. Tuttavia, non riesco a capire come usarlo, in base alla documentazione. Voglio affermare che l'oggetto passo nel mio costruttore è un esempio di MyOtherObjectSimpleTest: come affermare che viene generato un errore PHP?

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

Dove sto andando male?

risposta

13

Il tipo di suggerimento genera E_RECOVERABLE_ERROR che può essere rilevato da SimpleTest dalla versione 5.2 di PHP. Quanto segue catturerà qualsiasi errore contenente il testo "deve essere un'istanza di". Il costruttore di PatternExpectation prende una regex perl.

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

Non ho verificato questo, quindi presumo solo che sia vero. Grazie per la tua risposta! – Andrew

2

PHP ha sia errori che eccezioni, che funzionano in modo leggermente diverso. Il passaggio di un tipo errato a una funzione tipografica solleverà un'eccezione. Devi prenderlo nel tuo caso di test. Ad esempio .:

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

o semplicemente:

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

Ma si noti che questo fermerà il test dopo la linea in cui si verifica l'eccezione.

+1

Non ti ho dato un voto negativo. Ma, pensavo che dovrei menzionare il motivo per cui penso che qualcuno lo avrebbe svalutato: questa risposta si riferisce a "Eccezioni", non a "Errori". Quando un suggerimento tipo prende il tipo sbagliato, genera un 'errore' e non un 'eccezione'. –

1

ci si deve aspettare l'errore prima che accada, quindi SimpleTest lo inghiottirà e conterà un passaggio, se il test arriva alla fine e non ci sono errori allora fallirà. (ci sono expectError e expectException che agiscono allo stesso modo, rispettivamente per errori PHP (non fatali) ed Eccezioni.)

2

Si scopre che SimpleTest in realtà non supporta questo. Non è possibile rilevare errori Fatal PHP in SimpleTest. Il tipo di suggerimento è ottimo, tranne che non puoi testarlo. Il tipo di suggerimento genera errori PHP fatali.

+2

A partire dalla versione 5.2 di PHP, SimpleTest può acquisire errori di tipo Suggerimento. Vedi la mia risposta. –