PHPUnit: assertInstanceOf() funktioniert nicht, wenn der Typ als zweites Argument als Nicht-String übergeben wird

Lesezeit: 2 Minuten

Ich muss überprüfen, ob eine Variable ein Objekt von ist Benutzer Art.

Benutzer ist meine Klasse $user mein Objekt

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

Das funktioniert nicht. Ich habe eine Verwendung von undefiniertem konstantem Benutzer – angenommenem ‘Benutzer’.

  • Das ist teilweise nicht nachvollziehbar. Was ist damit gemeint “Ich habe eine Verwendung von undefiniertem konstantem Benutzer – angenommener ‘Benutzer’.”?

    – Peter Mortensen

    29. Dezember 2022 um 0:53 Uhr

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

Ich denke, Sie verwenden diese Funktion falsch. Versuchen:

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

  • Ab PHP5.5 Sie können diese Syntax auch verwenden $this->assertInstanceOf(User::class, $user);.

    – james2doyle

    5. Juni 2016 um 23:56 Uhr


Es ist immer eine gute Idee, es zu verwenden ::class wo immer du kannst. Wenn Sie sich an diesen Standard gewöhnt haben, müssen Sie keine FQCNs (vollständig qualifizierte Klassennamen) oder Escape-Backslashes verwenden. Außerdem bieten IDEs eine bessere Funktionalität, wenn sie das wissen User Hier ist nicht nur ein String, sondern eine Klasse.

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

  • Ich stimme dieser Aussage voll und ganz zu, aber es klingt eher wie ein Kommentar zur akzeptierten Antwort als wie eine separate Antwort …

    – rob74

    4. August 2020 um 13:59 Uhr

  • Ich denke, dies ist der erforderliche Weg in PHP Unit 9.5.

    – Alex

    28. Januar 2022 um 13:38 Uhr

  • Warum ist es eine gute idee zu verwenden ::class?

    – Peter Mortensen

    29. Dezember 2022 um 0:55 Uhr

Benutzeravatar von Rafal Kozlowski
Rafal Kozlowski

Oder Sie können etwas verwenden wie:

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

Normalerweise verwende ich dies, wenn ich überprüfe, ob die Setter-Methode den Verweis auf sich selbst zurückgibt.

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

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

    – marcegarba

    9. Dezember 2015 um 18:41 Uhr


  • Eigentlich die SomeClass::class Funktion wurde hinzugefügt PHP5.5

    – james2doyle

    5. Juni 2016 um 23:57 Uhr

  • Ja, natürlich, aber das ist kein Problem, denke ich. Dienste, die die PHP-Version 5.4 und niedriger verwenden, machen weniger als 10 % der gesamten PHP-Nutzung aus (laut Composer-Statistiken) seld.be/notes/php-versions-stats-2016-1-edition

    – Rafal Kozlowski

    7. Juni 2016 um 7:14 Uhr

1441010cookie-checkPHPUnit: assertInstanceOf() funktioniert nicht, wenn der Typ als zweites Argument als Nicht-String übergeben wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy