2013-05-30 13 views
37

Muszę sprawdzić, czy zmienna jest obiektem typu User. Użytkownik nie jest moja klasa $user mój obiektPHPUnit: assertInstanceOf() nie działa

$this->assertInstanceOf($user,User); 

ten nie działa, mam użycie niezdefiniowanej stałej Użytkownik - zakładany 'user'

Z góry dzięki za pomoc

Odpowiedz

5

lub użyć coś takiego:

$this->assertInstanceOf(get_class($expectedObject), $user); 

Zwykle używam tego, kiedy jestem sprawdzanie tj jeśli setter zwraca odwołanie do siebie.

$testedObj = new ObjectToTest(); 
$this->assertInstanceOf(
    get_class($testedObj), 
    $testedObj->setSomething('someValue'), 
    'Setter is not returning $this reference' 
); 
+1

Używając PHP 5.6, możesz użyć statycznej metody ':: class', takiej jak ta: ' $ this-> assertInstanceOf (Klasa ObjectToTest :: $ testedObj-> setSomething ('someValue') ' – marcegarba

+2

Właściwie' SomeClass :: funkcja klasy została dodana w [PHP 5.5] (http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name) – james2doyle

+0

Tak, oczywiście, ale to nie jest problem, jak sądzę. Usługi korzystające z php w wersji 5.4 i niższej są poniżej 10% całkowitego użycia php (według statystyk kompozytora) https://seld.be/notes/php-versions-stats-2016-1-edition –

6

Zawsze dobrze jest korzystać z ::class, gdzie tylko można. Jeśli przyzwyczaisz się do tego standardu, nie musisz używać FQCN (w pełni kwalifikowanych nazw klas) lub uciec z ukośników odwrotnych. Ponadto, IDE zapewniają lepszą funkcjonalność, jeśli wiedzą, że tutaj User nie jest tylko łańcuchem, ale klasą.

$this->assertInstanceOf(User::class, $user); 
Powiązane problemy