我正在学习如何使用mockery来运行一些单元测试,我不知道如何模拟我的数据库类。它由可以像这两个例子一样链接的单独方法组成:
$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);
现在我对如何通过"对应"感兴趣方法的参数?而且,我将如何模拟第二种情况。
答案 0 :(得分:8)
如果你不关心这些论点,你可以shouldReceive('select->where->runQuery->fetch')
。如果您确实想检查参数,则必须执行以下操作以实现预期:
$db->shouldReceive('select')->with('someTblName', ['fieldName'])
->once()->andReturn(m::self())->getMock()
->shouldReceive('where')...
最后的shouldReceive将是shouldReceive('fetch')->andReturn(null)
。
答案 1 :(得分:0)
如果您对此类语法感到满意
$db = m::stub('Database', array(
'select(someTblName)->where(fieldName,someValue)->runQuery->fetch' => 'return stuff',
'select(someOtherTblName)->where(...)->runQuery->fetch' => 'return other stuff'
));
你可以使用我刚刚编写的小型Mockery助手/扩展
https://github.com/elvisciotti/mockery-stub-chain-args
alpha版本,我很快就会改进它