2014-10-31 114 views
0

類中的方法中實例化一個對象,我測試的樣子:是否有可能嘲笑被測試

function X($arg) 
{ 
    // Code ... 
    $object = new Object; 
    // Code ... 
} 

有沒有辦法來嘲笑那個對象?

回答

1

不能在單元測試中使用PHPUnit模擬對象,您不能。

根據你如何加載你的類,你將能夠創建一個「模擬」類來取代該對象。這將是這樣的:

您的測試文件:

class Object { 
    <mock functionality here> 
} 

class TestCase extends PHPUnit_Framework_TestCase { 
<your tests> 
} 

但是,如果你想在另外一個測試來實際測試Object這會導致問題。在這種情況下,您將收到一個致命錯誤,指出您無法重新定義班級。 這不是最佳做法。

最好的辦法是重構類,以便使用依賴注入。更改該類,以便將Object作爲構造函數參數或是方法簽名的一部分。

這篇文章可能會有所幫助:http://misko.hevery.com/2008/07/08/how-to-think-about-the-new-operator/

+0

謝謝,我會使用依賴注入normaly,但我測試的代碼我沒寫,也沒有依賴注入,它有脂肪,真正的脂肪控制器。 – teeyo 2014-10-31 15:37:48

+1

對於控制器,我發現你最終會得到大多數人認爲是「集成」測試的東西。通過這種方式,您可以對API進行初始端到端測試,讓您使用DI – Schleis 2014-10-31 15:53:13

+0

重構我開始感覺到我正在重複自我,使用PHPUnit進行功能測試並接受Behat驗證測試,我想我我們將繼續爲模型和助手進行單元測試,併爲控制器進行驗收測試。 – teeyo 2014-11-03 08:41:56