8

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

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

require_once一旦我在调用之前再次在测试中调用,此消息就会消失assertInstanceOf。这似乎不对。似乎 PHPUnit 应该足够聪明,可以知道该类已经加载,所以我不必再次加载它。我想错了吗?我的 PHPUnit 配置错误吗?有没有办法避免在我的测试中再次要求这个类?

4

2 回答 2

29

请务必使用完整的命名空间:

$this->assertInstanceOf('\Namespace\Subnamespace\MyClass', $obj);
于 2013-04-17T02:18:03.667 回答
2

您的单位可能与此类似:

$this->assertInstanceOf('MyOtherClass', 
    $this->object->someFunctionReturnsOtherClass());

这没关系,除了这里,注意:phpunit 方法在你的对象之前被调用。既然你说过,你的对象已经在内部做了一个 require_once 意味着直到你的方法被调用,'MyOtherClass' 仍然是一个未定义的类。这正是发生的事情。Phpunit 函数准备使用“MyOtherClass”进行检查,发现它未定义!

对象自己的 require_once 甚至从未被调用过。这就是为什么你必须自己打电话。如果你使用类似的语句true == $returnObject instanceOf MyOtherClass,它会返回相同的错误,因为在解析 PHP 时找不到类定义。

于 2012-05-03T05:34:54.303 回答