PHPUnit:assertInstanceOf()不起作用

56 php phpunit assert assertions

我需要检查变量是否是User类型的对象.用户是我的班级$user我的对象

$this->assertInstanceOf($user,User);
Run Code Online (Sandbox Code Playgroud)

这不起作用,我使用未定义的常量用户 - 假设'用户'

在此先感谢您的帮助

Man*_*tas 112

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

我认为你使用这个功能错了.尝试:

$this->assertInstanceOf('User', $user);
Run Code Online (Sandbox Code Playgroud)

  • 从[PHP 5.5]开始(http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name),您可以使用此语法以及`$ this-> assertInstanceOf (User :: class,$ user);`. (40认同)

Ráp*_*rás 33

::class在任何地方使用它总是一个好主意.如果您习惯了这个标准,则不必使用FQCN(完全限定的类名)或转义反斜杠.此外,如果IDE知道这User不仅仅是一个字符串,而是一个类,它提供了更好的功能.

$this->assertInstanceOf(User::class, $user);
Run Code Online (Sandbox Code Playgroud)

  • 我完全同意这个说法,但它听起来更像是对已接受答案的评论,而不是一个单独的答案...... (3认同)

Raf*_*ski 6

或者您可以使用以下内容:

$this->assertInstanceOf(get_class($expectedObject), $user);
Run Code Online (Sandbox Code Playgroud)

我通常在检查时使用它,即setter方法是否返回对self的引用.

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

  • 使用PHP 5.6,您可以使用`:: class`静态方法,如下所示:`$ this-> assertInstanceOf(ObjectToTest :: class,$ testedObj-> setSomething('someValue')` (3认同)
  • 实际上,在[PHP 5.5]中添加了`SomeClass :: class`功能(http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name) (2认同)