2013-05-19 51 views
1

說我有下面的類:PHPUnit的:通過模擬對象作爲方法參數

class Document 
{ 
    private file; 

    public function setFile(UploadedFile $file) 
    { 
    $this->file = $file; 
    } 

    public function getExt() 
    { 
    return $this->file->guessExtension(); 
    } 
} 

我想測試getExt()方法。我試圖建立測試如下:

$file = $this->getMock('UploadedFile'); 

$file->expects($this->at(0)) 
    ->method('guessExtension') 
    ->will($this->returnValue('png')); 

$doc = new Document(); 
$doc->setFile($file); 
... 

但是,它給我的錯誤說setFile()期待的UploadedFile的一個實例,模擬對象發現來代替。任何人都可以闡明如何測試這種情況?當涉及到模擬和存根測試時,我是一名初學者。

謝謝!

+0

,不是應該是一個問題,生成的模擬類繼承了原始類。你偶然使用命名空間嗎? –

回答

-1

感謝製造廠的評論。我做了以下改變,並得到它的工作,

$file = $this->getMockBuilder('Symfony\Component\HttpFoundation\File\UploadedFile') 
     ->disableOriginalConstructor() 
     ->getMock(); 
-1

從PHP 5.5.16起,謝謝解決方案不能再使用了。 See reference.

一個可能的解決方案是在/tmpsetUp()/tearDown()中創建一個臨時虛擬文件,並將其傳遞給構造函數。然後我們嘲笑所需的方法返回需要的東西。

注意UploadedFile會要求您通過兩個參數