2009-03-04 11 views
7

Jeśli mam rację, SimpleTest pozwoli ci potwierdzić błąd PHP. Jednak nie mogę wymyślić, jak z niego korzystać, na podstawie dokumentacji. Chcę stwierdzić, że przedmiotem przechodzę do mojego konstruktora jest instancją MyOtherObjectSimpleTest: Jak twierdzić, że błąd PHP został zgłoszony?

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

Gdzie jestem będzie niewłaściwy?

Odpowiedz

13

Podpowiedź typu E_RECOVERABLE_ERROR, która może zostać przechwycona przez SimpleTest od wersji PHP 5.2. Poniższe czynności wykryją błąd zawierający tekst "musi być instancją". Konstruktor PatternExpectation pobiera wyrażenie regularne perl.

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

Nie zweryfikowałem tego, więc zakładam, że to prawda. Dzięki za odpowiedź! – Andrew

2

PHP zawiera zarówno błędy, jak i wyjątki, które działają nieco inaczej. Przekazywanie niewłaściwego typu do funkcji z podpowiedziami powoduje wyjątek. Musisz to złapać w swoim przypadku testowym. Np .:

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

lub po prostu:

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

Należy jednak pamiętać, że spowoduje to zatrzymanie testu po wierszu, w którym występuje wyjątek.

+1

Nie oddałem Ci głosu w dół. Ale, pomyślałem, że powinienem wspomnieć, dlaczego myślę, że ktoś by to zlekceważył: Ta odpowiedź odnosi się do "wyjątków", a nie "błędów". Kiedy wskazówka typu podnosi niewłaściwy typ, generuje "błąd", a nie "wyjątek". –

1

trzeba oczekiwać błędu zanim to się stanie, to będzie go połknąć SimpleTest i liczyć przepustkę, jeśli test dojdzie do końca i nie ma błędu następnie zakończy się niepowodzeniem. (Jest oczekiwanie Expector i ExpectException, które działają w taki sam sposób, odpowiednio dla błędów i wyjątków PHP (niekrytycznych).)

2

Okazało się, że SimpleTest tak naprawdę nie obsługuje tego. Nie można złapać Fatal PHP błędów w SimpleTest. Podpowiedź typu jest świetna, ale nie możesz jej przetestować. Podpowiedź typu zgłasza fatalne błędy PHP.

+2

Od wersji PHP 5.2 SimpleTest może przechwytywać błędy wskazujące typ. Zobacz moją odpowiedź. –

Powiązane problemy