2013-03-20 122 views
2

我有一個使用數據庫適配器的模型,我想測試它。數據庫適配器的構造函數處理所有數據庫連接,所以我想在測試期間避免它,否則返回錯誤關於數據庫通過/數據庫用戶名等未設置。disableOriginalConstructor()和will()衝突

我正在運行的代碼如下,因爲您看到我使用disableOriginalConstructor()來阻止調用構造函數。

的問題是,我得到這個錯誤,當我嘗試使用$mysql_stubwill():傳遞給 PHPUnit_Framework_MockObject_Builder_InvocationMocker

參數1 ::會()必須 實現接口PHPUnit_Framework_MockObject_Stub,實例 Mock_Pages_MySQL_Page_46612429給出,稱爲在 /Applications/MAMP/htdocs/lib/Pages/trunk/Tests/Unit/PageTest.php上 線185和限定

有人建議,正確的語法是什麼?

class Page { 

    public function getByUrl($url) 
    { 
     $db_page = $this->getDAOInterface(); 
     $db_page->getByUrl($url); 
     $this->assign($db_page); 
     return $this; 
    } 

} 

class PageTest extends PHPUnit_Framework_TestCase 
{ 
    public function testGetByUrl() 
    { 
     $test_url = "foo-bar"; 
     $page_stub = $this->getMock(
      'Pages_Model_Page', 
      array('getDAOInterface', 'assign') 
    ); 

     $mysql_stub = $this->getMockBuilder('Pages_MySQL_Page') 
         ->setMethods(array('getByUrl')) 
         ->disableOriginalConstructor() 
         ->getMock(); 

     $mysql_stub->expects($this->once()) 
       ->method('getByUrl') 
       ->with($this->equalTo($test_url)); 

     $page_stub->expects($this->once()) 
       ->method('getDAOInterface') 
       ->with() 
       ->will($mysql_stub); 

     $page_stub->expects($this->once()) 
       ->method('assign') 
       ->with($mysql_stub); 

     $page_stub->geByUrl($test_url); 
    } 
} 

回答

5

好吧,終於弄清楚它出了什麼問題。這個錯誤是由我的一個遺漏造成的。意願應按以下方式引用:

$page_stub->expects($this->once()) 
      ->method('getDAOInterface') 
      ->with() 
      ->will($this->returnValue($mysql_stub));