2013-05-30 2 views
37

Мне нужно проверить, является ли переменная объектом типа пользователя. Пользователя моего класса $user моего объектаPHPUnit: assertInstanceOf() не работает

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

Это не работает, у меня есть использование неопределенного постоянного пользователя - предполагаемый «User»

Заранее спасибо за помощь

ответ

88

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

Я думаю, что вы используете эту функцию неправильно. Попробуйте:

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

По состоянию на [PHP 5.5] (http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name), вы можете использовать этот синтаксис, а также '$ this-> assertInstanceOf (User :: class, $ user);'. – james2doyle

5

Или Вы можете использовать что-то вроде:

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

Я обычно использую это, когда я проверяю, т.е. если сеттер метод возвращает ссылку на себя.

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

Используя PHP 5.6, вы можете использовать статический метод ':: class', например: ' $ this-> assertInstanceOf (ObjectToTest :: class, $ testedObj-> setSomething ('someValue') ' – marcegarba

+2

Собственно,' SomeClass :: class' была добавлена ​​в [PHP 5.5] (http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name) – james2doyle

+0

Да, конечно, но это не проблема. Я полагаю, что услуги, использующие php версии 5.4 и ниже, составляют менее 10% от общего количества php-приложений (согласно статистике композитора) https://seld.be/notes/php-versions-stats-2016-1-edition –

6

Это всегда хорошая идея использовать ::class где вы можете. Если вы привыкнете к этому стандарту, вам не нужно использовать FQCN (полностью квалифицированные имена классов) или избежать обратных косых черт. Кроме того, IDE обеспечивают лучшую функциональность, если они знают, что User здесь не просто строка, а класс.

$this->assertInstanceOf(User::class, $user); 
Смежные вопросы