Guzzle6文档提供了一种简单的方法来模拟HTTP调用,以便每个请求返回一个特定的响应:http://docs.guzzlephp.org/en/latest/testing.html#mock-handler但是,正如文档中所述,MockHandler定义了一个响应队列,无论URL是什么,每个请求都会以相同的顺序发送。如何告诉Guzzle在每次调用时为给定的URL发送特定的响应?例如,我想要这个电话:$client->request('GET','/products')->getBody();不是发出实际请求而是总是返回:{'products'=>[{id:1,name:'Prod
我怀疑我的问题的“最佳”答案是使用依赖注入(inject)并完全避免该问题。不幸的是我没有那个选项...我需要为一个导致第三方库被实例化的类编写测试。我想模拟/stub库类,这样它就不会进行实时API调用。我在CakePHPv3.x框架中使用phpunit。我能够模拟库并创建stub响应,但这并不能阻止“真实”类被我的测试之外的代码实例化。我考虑过尝试模拟实例化上游的类,但是它们很多,这会使测试编写/维护起来非常笨拙。有没有办法以某种方式“stub”类的实例化?类似于我们可以告诉php单元期待API调用并预设返回数据的方式? 最佳答案
基本上我必须为许多LaravelController编写测试,其中大部分是CRUD(读取、存储、更新)并且大部分逻辑都放在这些(继承代码,不是我的)中。我需要做的是从用户的角度自动化测试。因此,我需要访问所有端点并针对真实数据库进行测试,并检查是否一切顺利。我几乎没有测试经验,但据我所知,Controller应该通过集成/验收测试进行测试。现在我通过扩展Laravel的TestCase测试了Read方法,这里是一个例子:classSongsTestextendsTestCase{publicfunctiontestBasicIndex(){$arguments=[];$response
我正在尝试模拟属性,但无法让它工作。在这种情况下,我尝试模拟请求属性Symfony\Component\HttpFoundation\Request。根据thisanswer我应该为__get返回一个值以下代码一直显示NULL:$testRequest=$this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->disableOriginalConstructor()->getMock();$testRequest->expects($this->any())->method('__get')->with($th
我们使用Varien_Http_Client从Magento扩展发出http请求,如下所示:publicfunctioncallApi(…){//Setdefaultfactoryadaptertosocketincasecurlisn'tinstalled.$client=newVarien_Http_Client($apiUri,array('adapter'=>'Zend_Http_Client_Adapter_Socket','timeout'=>$timeout,));$client->setRawData($xmlDoc->saveXML())->setEncType('t
如何为PHPUnitMock重置expects()?我有一个SoapClient的模拟,我想在测试中多次调用它,重置每次运行的期望值。$soapClientMock=$this->getMock('SoapClient',array('__soapCall'),array($this->config['wsdl']));$this->Soap->client=$soapClientMock;//callviaquery$this->Soap->client->expects($this->once())->method('__soapCall')->with('someString',
我正在为我的View助手编写一些测试。这是我第一次想用模拟对象做点什么。我正在使用默认的PHPUnit模拟框架。我已经编写了一个函数来准备我的模拟对象:privatefunctiongetTestStub(){$mockResult=array();$mock=$this->getMock('My\Entity\Product');$mock->expects($this->once())->method('getId')->will($this->returnValue(1));$mock->expects($this->once())->method('getName')->wil
我正在尝试测试一个管理数据库中数据访问的类(您知道,本质上是CRUD)。我们正在使用的DB库恰好有一个API,您首先通过静态调用获取表对象:functiongetFoo($id){$MyTableRepresentation=DB_DataObject::factory("mytable");$MyTableRepresentation->get($id);...dosomestuffreturn$somedata}...你明白了。我们正在尝试测试此方法,但模拟了DataObject的东西,以便(a)我们不需要实际的数据库连接来进行测试,并且(b)我们甚至不需要包含DB_DataObj
我试图对我的Controller进行单元测试,但我在互联网上找到的每个教程都说我应该使用$this->dispatch("controller/action")来运行我想要测试的特定操作。但是这样做,我无法模拟任何数据映射器或对其他方法的其他调用。为了解决这个问题,我试图获取Controller类的一个实例,然后直接调用我想测试的方法,但是这样做,我得到了一个错误:Zend_Exception:Settingrequestobjectmanuallyisnotallowed我什至不确定这是正确的方法,因为我真的不知道我将如何测试这样的事情。我的测试用例:http://pastie.or
SomeClass类中的方法setValue()接受参数,但无法取回此参数以进行断言。我能否为方法setValue()创建一个stub,以允许保存传递给该方法的参数?classSomeClass{publicfunctionsetValue($name,$value){//dosomestuff}publicfunctiondoSomething(array$values){foreach($valuesas$name=>$value){$this->setValue($name,trim($value));}}}classTestSomeClassextendsPHPUnit_Fra