我正在尝试测试一个类中的一个方法,该类包含一个使用Laravel的request()助手的方法。这是方法:类别类publicfunctiongetCanonicalUrl(){returnpreg_match('/\/sale\/./',request()->getRequestUri())?'':url($this->getUrlKey());}测试应该使这个帮助程序在执行getRequestUri()时正确捕获URI,但它实际上返回一个空字符串。这是我对测试进行的一千次尝试之一。测试publicfunctiontestCanonical(){//...$requestMock=Mo
我正在为我的Web应用程序编写的PHPUnit测试的长度和不透明性让我很吃力。测试中的代码似乎比他们正在测试的代码多一个数量级。例如,假设我的网站有一个CatController对象,其上有这个方法:publicfunctionaddCat(Default_Model_Cat$cat){$workflow=$this->catWorkflowFactory->create(array($this->serviceExecutor));$workflow->addCat($cat);}我必须创建以彻底测试它的单元测试如下所示:publicfunctiontestAddCat(){$cat
在这个(非常)快速引用Mockery的最后一段中,作者解释了一些模拟的行为修饰符,它们不是默认的,但可能很有用。其中包括makePartial()调用和shouldDeferMissing()调用。这些与默认行为有何不同?当您创建模拟(Mockery::mock('myClass'))并且不添加任何方法期望时,所有方法调用都会尽我所能转到父级(即MyClass)看...这是Mockery快速引用的最后一部分。\Mockery::mock('MyClass')->makePartial()also\Mockery::mock('MyClass')->shouldDeferMissing(
我正在围绕第三方API编写PHP包装器。对于练习来说更是如此,但我也没有看到目前任何地方都有一个好的,所以也许将来其他人会使用它。我的单元测试非常简单,但现在我已经达到了极限。API的开发者有一个最大请求限制(每秒1个,每分钟20个),我的单元测试通过我的API包装器访问API端点,因此测试我的包装器。然而,运行phpunit已开始返回429toomanyrequests错误。因此,Phpunit显然正在运行我拥有的15个左右的测试,所有这些测试都太快地访问端点并给我这个错误。有人知道我是否a)应该模拟这些响应,以及b)如果我正在测试我的包装器,我将如何模拟这些响应?。如果测试不在我的
这与thisquestion有关,但遵循该解决方案并没有解决我的问题。我也意识到Laravel'sowndocumentation声明您不应该模拟Request对象,但我不确定如何编写此测试。这是我要测试的代码的外观:publicfunctiongetThirdSegment(){returnRequest::segment(3);}这是我目前的测试:/***@test*/publicfunctionindexReturnsOk(){$this->prepareForTests();$this->call('GET','/api/v1/courses');$this->assertRe
我有一个具有以下功能的类:publicfunctionget(string$uri):stdClass{$this->client=newClient;$response=$this->client->request('GET',$uri,$this->headers);returnjson_decode($response->getBody());}如何从PHPUnit模拟请求方法?我尝试了不同的方法,但它总是尝试连接到指定的uri。我试过:$clientMock=$this->getMockBuilder('GuzzleHttp\Client')->setMethods('requ
如果我模拟存储库方法find我会得到预期的结果,但如果我调用findBy、findOneBy、findOneById中的任何一个,我总是得到null。代码示例:$mock->expects($this->once())->method('getId')->will($this->returnValue(1));$mockRepository->expects($this->any())->method('findBy')//ifhereIuse'find'worksforallothercasesalwaysnull->will($this->returnValue($mock));发
我正在编写依赖于外部类exceptionManager的单元测试。我希望能够预测此类中的一些特定函数将返回什么,所以我使用了一个模拟对象。代码非常简单:$mockExceptionManager=$this->getMock('exceptionManager');问题是,我的异常管理器实现了IteratorAggregate接口(interface),它需要一个如下所示的方法:publicfunctiongetIterator(){returnnewArrayIterator($this->exceptions);}当我运行单元测试时,出现以下错误:Fatalerror:Cannot
如何在PHPUnit中使模拟方法返回其传递的参数?例如:$redirector->expects($this->once())->method('gotoUrl')->will($this->returnValue($argument)); 最佳答案 根据PHPUnitmanual:$stub->expects($this->any())->method('doSomething')->will($this->returnArgument(0)); 关于php-如何返回模拟方法的参数?,
在我的测试类的设置中,我为用户创建了一个模拟对象。创建模拟时,它会执行如下操作:$other=$this->getMock('Other');$user->expects($this->any())->method('_getOtherInstance')->will($this->returnValue($other));现在在删除用户时调用_getOtherInstance删除三级信息。当我在测试类的tearDown中运行删除时,在parent::tearDown之前,_getOtherInstance返回null.我知道模拟已正确设置,因为在setUp中运行delete可以正常工