2014-05-02 32 views
0

我得到一個抽象類的模擬,並且使用expects來驗證特定的方法被調用兩次並帶有一些特定的值。即使生產代碼是正確的,該斷言仍然失敗。這是當我使用getMockForAbstractClass方法創建模擬。現在,當我創建這個抽象類的具體派生物,並將其提供給getMock時,它確實有效。然而,這種方法並不好,所以我想知道我是否可以避免它。抽象類的PHPUnit方法調用斷言失敗

第一次嘗試,使用getMockForAbstractClass不起作用:http://pastebin.com/09n92Q6h

第二次嘗試,使用混凝土衍生物,它的工作:http://pastebin.com/SxxgN5Cw

回答

0

隨着ocramius幫助下,我發現,抽象類的具體方法做不會被默認模擬出來。需要指定需要在getMockForAbstractClass中嘲笑的具體方法。

private function getMockedAbstractClass($className, array $methods) 
{ 
    return $this->getMockForAbstractClass(
     $className, 
     array(), 
     '', 
     true, 
     true, 
     true, 
     $methods 
    ); 
} 

使用這種模擬Builder界面是有些更好:

$platform = $this->getMockBuilder($className) 
     ->setMethods($methods) 
     ->getMockForAbstractClass(); 

的完整的解決方案可以在這裏看到:https://github.com/doctrine/dbal/pull/586/files