在断言实例之前,PHPUnit强迫我要求类

时间:2012-05-02 20:11:17

标签: php phpunit

我正在测试一个返回另一个类的实例的对象。在内部,该类调用require_once。但是,当我尝试检查返回的对象是否属于该类型时,我收到此消息:

InvalidArgumentException: Argument #1 of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name

在致电require_once之前,我在测试中再次拨打assertInstanceOf后,此消息消失了。这似乎不对。似乎PHPUnit应该足够聪明,知道该类已经加载,所以我不应该再次加载它。我在想这个错吗?我的PHPUnit配置错了吗?有没有办法避免在我的测试中再次要求这门课程?

2 个答案:

答案 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时无法找到类定义。