2
我有一個使用數據庫適配器的模型,我想測試它。數據庫適配器的構造函數處理所有數據庫連接,所以我想在測試期間避免它,否則返回錯誤關於數據庫通過/數據庫用戶名等未設置。disableOriginalConstructor()和will()衝突
我正在運行的代碼如下,因爲您看到我使用disableOriginalConstructor()
來阻止調用構造函數。
的問題是,我得到這個錯誤,當我嘗試使用$mysql_stub
在will()
:傳遞給 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);
}
}