2013-05-30 19 views
37

Ich muss überprüfen, ob eine Variable ein Objekt des Typs Benutzer ist. Benutzer meine Klasse sind $user mein ObjektPHPUnit: assertInstanceOf() funktioniert nicht

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

Dies funktioniert nicht, das habe ich eine Verwendung von undefinierten Konstante Benutzer - angenommen 'User'

Vielen Dank im Voraus für Ihre Hilfe

Antwort

5

Oder Sie können wie etwas verwenden:

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

ich dies in der Regel verwenden, wenn ich das heißt Kontrolle bin, wenn Setter-Methode Bezug auf sich selbst zurückkehr.

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

Mit PHP 5.6 können Sie die statische Methode ':: class' verwenden, wie folgt: ' $ this-> assertInstanceOf (ObjectToTest :: class, $ testedObj-> setSomething ('someValue') ' – marcegarba

+2

Eigentlich die' SomeClass :: class 'Feature wurde hinzugefügt in [PHP 5.5] (http://php.net/manual/de/migration55.new-features.php#migration55.new-features.class-name) – james2doyle

+0

Ja, natürlich, aber Das ist kein Problem, denke ich, Dienste mit PHP Version 5.4 und niedriger sind weniger als 10% der gesamten PHP-Nutzung (nach Composer Stats) https://seld.be/notes/php-versions-stats-2016-1-edition –

6

Es ist immer eine gute Idee, ::class zu verwenden, wo immer Sie können. Wenn Sie sich an diesen Standard gewöhnt haben, müssen Sie keine FQCNs (voll qualifizierte Klassennamen) verwenden oder Backslashes umkehren. IDEs bieten auch eine bessere Funktionalität, wenn sie wissen, dass User hier nicht nur eine Zeichenfolge, sondern eine Klasse ist.

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