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

And*_*rew 7 php phpunit

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

InvalidArgumentException: Argument #1 of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name
Run Code Online (Sandbox Code Playgroud)

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

Tyl*_*ier 27

一定要使用完整的命名空间:

$this->assertInstanceOf('\Namespace\Subnamespace\MyClass', $obj);
Run Code Online (Sandbox Code Playgroud)


the*_*kas 2

您的单位可能与此类似:

$this->assertInstanceOf('MyOtherClass', 
    $this->object->someFunctionReturnsOtherClass());
Run Code Online (Sandbox Code Playgroud)

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

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