PHPUnit: assertInstanceOf() no funciona al pasar el tipo como segundo argumento como no cadena

2 minutos de lectura

Necesito verificar si una variable es un objeto del Usuario escribe.

Usuario es mi clase $user mi objeto

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

Esto no está funcionando. Tengo un uso de Usuario constante indefinido – ‘Usuario’ asumido.

  • Esto es en parte incomprensible. Qué quiere decir “Tengo un uso de Usuario constante indefinido – ‘Usuario’ asumido”.?

    -Peter Mortensen

    29 de diciembre de 2022 a las 0:53

http://apigen.juzna.cz/doc/sebastianbergmann/phpunit/function-assertInstanceOf.html

Creo que estás usando mal esta función. Intentar:

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

  • A partir de PHP 5.5 también puedes usar esta sintaxis $this->assertInstanceOf(User::class, $user);.

    – james2doyle

    5 de junio de 2016 a las 23:56


Siempre es una buena idea usar ::class donde puedas Si se acostumbra a este estándar, no tiene que usar FQCN (nombres de clase completamente calificados) ni barras invertidas de escape. Además, los IDE proporcionan una mejor funcionalidad si saben que User aquí no es solo una cadena, sino una clase.

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

  • Estoy totalmente de acuerdo con esta afirmación, pero suena más como un comentario sobre la respuesta aceptada que como una respuesta separada …

    – robar74

    4 de agosto de 2020 a las 13:59

  • Creo que esta es la forma requerida en PHP Unit 9.5.

    – Alex

    28 de enero de 2022 a las 13:38

  • Por qué ¿Es una buena idea usar ::class?

    -Peter Mortensen

    29 de diciembre de 2022 a las 0:55

Avatar de usuario de Rafal Kozlowski
Rafal Kozlowski

O puedes usar algo como:

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

Usualmente uso esto cuando estoy comprobando, es decir, si el método setter está devolviendo una referencia a uno mismo.

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

  • Usando PHP 5.6, podría usar el ::class método estático, así: $this->assertInstanceOf(ObjectToTest::class, $testedObj->setSomething('someValue')

    – marcegarba

    9 dic 2015 a las 18:41


  • En realidad, el SomeClass::class característica fue añadida en PHP 5.5

    – james2doyle

    5 de junio de 2016 a las 23:57

  • Sí, por supuesto, pero esto no es un problema, supongo. Los servicios que usan la versión 5.4 de php y versiones anteriores están por debajo del 10 % del uso total de php (según las estadísticas del compositor) seld.be/notes/php-versions-stats-2016-1-edición

    – Rafal Kozlowski

    7 de junio de 2016 a las 7:14

¿Ha sido útil esta solución?