2014-05-19 52 views
4

Im學習如何使用嘲笑爲了運行一些單元測試,我不知道該怎麼做模擬我的數據庫類。它由不同的方法可以捆綁,像這兩個例子:嘲笑與鏈接的方法和參數

$db->select('someTblName',['fieldName']) 
    ->where('fieldName', 'someValue') 
    ->runQuery() 
    ->fetch(); //returns array or null 

另一個用途可能是這樣的:

$db->select('someTblName') 
    ->where('fieldName', 'someValue') 
    ->where('fieldName', array('>=' , 'someValue') 
    ->runQuery() 
    ->fetch(); //returns array or null 

從閱讀一些我看到,我可以這樣做的文件:(對於第一種情況)

$db = \Mockery::mock('Database'); 
$db->shouldReceive('select', 'where', 'runQuery', 'fetcth') 
    ->with(??????) 
    ->andReturn(null); 

現在我對如何將「相應」參數傳遞給方法感興趣嗎?而且,我會如何嘲笑第二種情況。

回答

8

如果您不關心參數,則可以使用shouldReceive('select->where->runQuery->fetch')。如果你想查詢的參數,你必須做到以下幾點,以鏈的期望:

$db->shouldReceive('select')->with('someTblName', ['fieldName']) 
    ->once()->andReturn(m::self())->getMock() 
    ->shouldReceive('where')... 

最後shouldReceive將shouldReceive('fetch')->andReturn(null)

+0

我最近了解了不在乎的方法關於論點。沒有意識到第二種方法謝謝 – LouieV

0

如果你很高興與這樣的

$db = m::stub('Database', array(
    'select(someTblName)->where(fieldName,someValue)->runQuery->fetch' => 'return stuff', 
    'select(someOtherTblName)->where(...)->runQuery->fetch' => 'return other stuff' 

))語法;

你可以使用一個小的嘲弄幫手/擴展我剛剛寫

https://github.com/elvisciotti/mockery-stub-chain-args

alpha版本,我可能會很快改善它