2013-05-30 4 views
37

Devo verificare se una variabile è un oggetto del tipo Utente. Utente mia classe $user mio oggettoPHPUnit: assertInstanceOf() non funzionante

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

Questo non funziona, ho un uso di indefinito costante utente - assunto 'utente'

Grazie in anticipo per il vostro aiuto

risposta

5

Oppure si può usare qualcosa come:

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

io di solito uso questo quando sto controllando vale a dire se il metodo setter sta tornando riferimento a sé.

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

Utilizzando PHP 5.6, è possibile utilizzare il metodo statico ':: class', in questo modo: ' $ this-> assertInstanceOf (ObjectToTest :: class, $ testedObject-> setSomething ('someValue') ' – marcegarba

+2

In realtà,' SomeClass La funzione :: class' è stata aggiunta in [PHP 5.5] (http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name) – james2doyle

+0

Sì, certo, ma Immagino che questo non sia un problema I servizi che utilizzano php versione 5.4 e inferiore sono sotto il 10% degli utilizzi totali di php (secondo le statistiche del compositore) https://seld.be/notes/php-versions-stats-2016-1-edition –

6

E 'sempre una buona idea di utilizzare ::class dove possibile. Se ci si abitua a questo standard, non è necessario utilizzare FQCN (nomi di classi completamente qualificati) o evitare le barre inverse. Inoltre, gli IDE offrono una migliore funzionalità se sanno che User qui non è solo una stringa, ma piuttosto una classe.

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