我正在测试一个返回另一个类的实例的对象。在内部,该类调用require_once
。但是,当我尝试检查返回的对象是否属于该类型时,我收到此消息:
InvalidArgumentException: Argument #1 of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name
在致电require_once
之前,我在测试中再次拨打assertInstanceOf
后,此消息消失了。这似乎不对。似乎PHPUnit应该足够聪明,知道该类已经加载,所以我不应该再次加载它。我在想这个错吗?我的PHPUnit配置错了吗?有没有办法避免在我的测试中再次要求这门课程?
答案 0 :(得分:25)
请务必使用完整的命名空间:
$this->assertInstanceOf('\Namespace\Subnamespace\MyClass', $obj);
答案 1 :(得分:2)
您的单位可能与此相似:
$this->assertInstanceOf('MyOtherClass',
$this->object->someFunctionReturnsOtherClass());
除此之外没关系,注意:phpunit方法在你的对象之前调用。既然你说过,你的对象已经在内部执行了require_once意味着在你的方法被调用之前,'MyOtherClass'仍然是一个未定义的类。这正是发生的事情。 Phpunit函数准备使用'MyOtherClass'进行检查,发现它未定义!
对象自己的require_once甚至从未被调用过。这就是你之前必须自己打电话的原因。如果使用像true == $returnObject instanceOf MyOtherClass
这样的语句,它将返回相同的错误,因为解析PHP时无法找到类定义。