2013-05-02 88 views
1

我有一對夫婦的測試在我的測試套件Zend_Test正在運行PHPUnit的Mock對象替換真實類

一個測試通過創建PHPUnit的MockBuilder的Foo_Bar_Baz一個模擬作爲類的依賴。現在在Foo_BAR_baz的測試中(案例中的更改是有意的,並且由於自動加載而是必要的),我沒有得到類,而是模擬的實例,這顯然不起作用。

對物體做var_dump的結果是class Foo_Bar_Baz#27115(0) { },所以它似乎是在創建一個模擬實例。

解決模擬中的問題可以讓事情按預期工作。我以前從來沒有在模擬對象中看到過這種行爲。出於某種原因,模擬類正在被加載到PHP中,以便當下一個測試嘗試實例化實際對象時,它會實例化模擬。爲什麼會發生這種情況?

+0

「我沒有上課,而是模擬的一個實例」 - 你能澄清一下嗎?你的代碼(而不是測試)正在實例化一個對象,你期望它是一個什麼樣的實例,你到底得到了什麼? – 2013-05-02 20:50:43

+0

閱讀了幾次之後,這可能會有所幫助:如果你正在創建一個模擬類,並在真實的具體類之後命名它,那麼你永遠無法獲得具體的類到內部註冊表中。 – 2013-05-02 20:53:58

+0

我能夠得到類名相同的具體類。只有當它們與我的例子不同時它纔會起作用。通常這在PHPUnit中工作,除非在這種非常奇怪的情況下。 – Schleis 2013-05-02 20:56:57

回答

0

PHP中的類名不區分大小寫,但* nix服務器上的文件名是。

我懷疑病例的變化是由於自動加載機制引起的行爲變化; PHP只會自動加載Foo_Bar_Baz.php和Foo_BAR_Baz.php中的一個。你的情況,如果你已經定義了一個類Foo_BAR_Baz(作爲模擬),那麼PHP將使用與Foo_Bar_Baz相同的定義,從而忽略你真實的類定義。