user1173169
user1173169

Reputation:

PHPUnit: assertInstanceOf() not working when passing type as second argument as non-string

I need to check if a variable is an object of the User type.

User is my class $user my object

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

This is not working. I have a the following error: use of undefined constant User - assumed 'User'.

Upvotes: 83

Views: 84449

Answers (3)

Mantas
Mantas

Reputation: 4296

https://docs.phpunit.de/en/9.5/assertions.html#assertinstanceof

I think you are using this function wrong. Try:

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

As of PHP 5.5 you can also use:

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

(From @james2doyle in comments.)

Upvotes: 150

Rafal Kozlowski
Rafal Kozlowski

Reputation: 760

Or you can use something like:

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

I usually use this when I'm checking i.e. if setter method is returning reference to self.

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

Upvotes: 7

Rápli András
Rápli András

Reputation: 3923

It's always a good idea to use ::class wherever you can. If you get used to this standard, you don't have to use FQCNs (fully qualified classnames), or escape backslashes. Also, IDEs provide better functionality if they know that User here is not just a string, but rather a class.

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

Upvotes: 66

Related Questions