2012-05-02 25 views
7

實例之前需要類。我正在測試一個返回另一個類的實例的對象。在內部,該類呼叫require_once。然而,當我嘗試檢查返回的對象是類型我得到這個消息:PHPUnit迫使我在聲明

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

此消息消失,一旦我調用assertInstanceOf前再次​​在我的測試呼叫require_once。這看起來不正確。看起來PHPUnit應該足夠聰明,知道這個類已經被加載了,所以我不需要再加載它。我在想這個錯嗎?我有我的PHPUnit配置錯誤嗎?有沒有辦法避免在我的測試中再次要求這個班級?

+0

是類本身,還是在類中所必需的'require_once'文件,外部類,但該類時加載被載入的文件? – Malovich

+0

'assertInstanceOf('MyClass')'NOT'assertInstanceOf(new MyClass)'。確保你傳遞一個字符串而不是該類的一個實例。 –

+0

我已經傳遞了一個字符串 – Andrew

回答

2

你的單元可以是與此類似:

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

這是正常的,除了在這裏,注:PHPUnit的方法被調用的對象之前。既然你說過,你的對象已經在內部做了一個require_once意味着直到你的方法被調用,'MyOtherClass'保持爲一個未定義的類。這正是發生了什麼事。 Phpunit函數準備使用'MyOtherClass'進行檢查,發現它是未定義的!

該對象自己的require_once甚至從未被調用過。這就是爲什麼你必須以前自己打電話。它類似於如果使用像true == $returnObject instanceOf MyOtherClass這樣的語句,它將返回相同的錯誤,因爲解析PHP時找不到類定義。

22

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

$this->assertInstanceOf('\Namespace\Subnamespace\MyClass', $obj); 
相關問題