前端之家收集整理的这篇文章主要介绍了
php – 支持链接方法的模拟对象,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否有一种相当简洁的
方法来模拟
支持方法链接的对象…例如,
数据库查询对象可能有一个如下所示的
方法调用:
$result = $database->select('my_table')->where(array('my_field'=>'a_value'))->limit(1)->execute();
如果我必须模拟两个不同的选择查询以便它们返回不同的结果,则会出现问题.有任何想法吗?
这是关于PHPUnit的,但其他单元测试框架的经验将有所帮助.
@H_
301_8@
我不确定这是你在找什么,所以请发表
评论:
class StubTest extends PHPUnit_Framework_TestCase
{
public function testChainingStub()
{
// Creating the stub with the methods to be called
$stub = $this->getMock('Zend_Db_Select',array(
'select','where','limit','execute'
),array(),'',FALSE);
// telling the stub to return a certain result on execute
$stub->expects($this->any())
->method('execute')
->will($this->returnValue('expected result'));
// telling the stub to return itself on any other calls
$stub->expects($this->any())
->method($this->anything())
->will($this->returnValue($stub));
// testing that we can chain the stub
$this->assertSame(
'expected result',$stub->select('my_table')
->where(array('my_field'=>'a_value'))
->limit(1)
->execute()
);
}
}
您可以将其与期望结合起来:
class StubTest extends PHPUnit_Framework_TestCase
{
public function testChainingStub()
{
// Creating the stub with the methods to be called
$stub = $this->getMock('Zend_Db_Select',FALSE);
// overwriting stub to return something when execute is called
$stub->expects($this->exactly(1))
->method('execute')
->will($this->returnValue('expected result'));
$stub->expects($this->exactly(1))
->method('limit')
->with($this->equalTo(1))
->will($this->returnValue($stub));
$stub->expects($this->exactly(1))
->method('where')
->with($this->equalTo(array('my_field'=>'a_value')))
->will($this->returnValue($stub));
$stub->expects($this->exactly(1))
->method('select')
->with($this->equalTo('my_table'))
->will($this->returnValue($stub));
// testing that we can chain the stub
$this->assertSame(
'expected result',$stub->select('my_table')
->where(array('my_field'=>'a_value'))
->limit(1)
->execute()
);
}
}