php – 支持链接方法的模拟对象
发布时间:2020-12-13 18:24:24 所属栏目:PHP教程 来源:网络整理
导读:我想知道是否有一种相当简洁的方法来模拟支持方法链接的对象…例如,数据库查询对象可能有一个如下所示的方法调用: $result = $database-select('my_table')-where(array('my_field'='a_value'))-limit(1)-execute(); 如果我必须模拟两个不同的选择查询以便
我想知道是否有一种相当简洁的方法来模拟支持方法链接的对象…例如,数据库查询对象可能有一个如下所示的方法调用:
$result = $database->select('my_table')->where(array('my_field'=>'a_value'))->limit(1)->execute(); 如果我必须模拟两个不同的选择查询以便它们返回不同的结果,则会出现问题.有任何想法吗? 这是关于PHPUnit的,但其他单元测试框架的经验将有所帮助.
我不确定这是你在找什么,所以请发表评论:
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() ); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |