2012-05-02 11 views
7

Testuję obiekt, który zwraca wystąpienie innej klasy. Wewnętrznie ta klasa nazywa się require_once. Jednak, gdy staram się sprawdzić, czy obiekt zwrócony jest tego typu, że ten komunikat:PHPUnit zmusza mnie do wymagania klas przed potwierdzeniem wystąpienia

InvalidArgumentException: Argument #1 of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name 

Ten komunikat odchodzi raz wzywam require_once ponownie w moim teście przed wywołaniem assertInstanceOf. To nie wydaje się właściwe. Wygląda na to, że PHPUnit powinien być wystarczająco inteligentny, aby wiedzieć, że klasa jest już załadowana, więc nie powinienem był ładować jej ponownie. Czy ja myślę o tym źle? Czy mam źle skonfigurowaną PHPUnit? Czy istnieje sposób na uniknięcie ponownego wymagania tej klasy w moim teście?

+0

Czy 'require_once' konieczne w klasie sama, albo w klasie plików, poza klasą ale załadowany, gdy klasa plik jest ładowany? – Malovich

+0

'assertInstanceOf ('MyClass')' NOT 'assertInstanceOf (new MyClass)'. Upewnij się, że przekazujesz ciąg znaków, a nie instancję klasy. –

+0

Już przekazuję ciąg znaków – Andrew

Odpowiedz

2

Urządzenie może być podobny do tego:

$this->assertInstanceOf('MyOtherClass', 
    $this->object->someFunctionReturnsOtherClass()); 

To jest w porządku z wyjątkiem tutaj, Uwaga: metoda phpunit jest wywoływana przed swoim obiekcie. Ponieważ powiedziałeś, twój obiekt już wewnętrznie robi require_once, dopóki twoja metoda nie zostanie wywołana, "MyOtherClass" zostaje jako niezdefiniowana klasa. Dokładnie to, co się stało. Funkcja phpunit przygotowana do sprawdzenia za pomocą "MyOtherClass" i okazało się, że jest niezdefiniowana!

Sam obiekt require_once nigdy nie został wywołany. Dlatego musisz wcześniej samemu zadzwonić. Jest podobny, jeśli użyjesz instrukcji takiej jak true == $returnObject instanceOf MyOtherClass, która zwróci ten sam błąd, ponieważ podczas analizowania PHP nie udało się znaleźć definicji klasy.

22

Pamiętaj, aby korzystać z pełnej nazw:

$this->assertInstanceOf('\Namespace\Subnamespace\MyClass', $obj); 
Powiązane problemy