2012-07-26 90 views
6

我試圖創建一個模擬,以滿足typehint與此代碼(嘲笑):模擬框架返回類不同的名稱和類型

return \Mockery::mock('\Contracts\Helpers\iFileSystemWrapper'); 

或本(PHPUnit的):

return $this->getMock('\Contracts\Helpers\iFileSystemWrapper'); 

但是,返回的模擬被稱爲Mockery\Mock ObjectMock_iFileSystemWrapper_a5f91049。如果我不打算在任何一個框架中使用它,那麼我應該如何檢查它?

爲什麼模擬框架試圖加載真實的類?如果我想要真正的課程,我會包括真正的課程。

這個問題在編寫測試的時候讓我放慢了很多次,我剛剛拋出類型暗示出窗口並檢查類名,或者只是使用生產對象,因爲嘲笑是一個痛苦的使用。

+1

顯示結果;''那裏$ mock'就是這個代碼返回 – zerkms 2012-07-26 21:18:27

+0

'布爾(假)' - – Seralize 2012-07-26 21:21:15

+0

這是奇怪的:-S – zerkms 2012-07-26 21:24:13

回答

-2

您需要使用特殊功能來檢查基類。 財產以後這樣的:

$mock = $this->getMock('MyClass'); 
$this->assertInstanceOf('MyClass', $mock); 
+0

這隻會測試模擬對象是您已經給出的類或接口的實例,它實際上只是測試測試框架:-)但是,如果您改爲使用常規的'if'語句和'instanceof'運算符,那麼好的IDE將停止向您顯示其「無效參數類型」警告。 – leftclickben 2013-02-03 08:31:48

2

我只是嘗試用我自己的現有的測試,並通過從一個存在於一個改變接口命名空間名稱不存在,我得到了完全一樣的你描述(使用phpunit)。我的模擬對象的類名稱爲Mock_ViewInterface_c755461e。當我將其更改回正確的界面名稱時,它工作正常。

所以我要說的是,無論是:

  1. 您正在嘗試使用一個不存在的接口的名稱(例如,一個錯字或丟失的命名空間部件)。
  2. 由於某些原因,您的圖書館代碼未被加載,例如在您的單元測試引導程序中,自動加載未正確設置。的var_dump`($模擬的instanceof \ \合同幫手\ iFileSystemWrapper)
相關問題