你能告诉我问题出在哪里吗?我有一个包含以下测试的GeneratorTest.php文件:shouldReceive('put')->with('foo.txt','foobar')->once();$generator=newGenerator($fileMock);$generator->fire();}publicfunctiontestGeneratorDoesNotOverwriteFile(){$fileMock=\Mockery::mock('\stats\jway\File');$fileMock->shouldReceive('exists')->once()->and
我在对具有在构造函数中调用的方法的类进行单元测试时遇到问题。我不明白如何mock这个。也许我应该使用phpUnit的“setUp”方法?我正在使用Mockery库。还有比这更好的工具吗?classToTest{function__construct(){$this->methodToMock();//needtomockthatforfuturetests}//mymethodsclass}如有任何建议,我们将不胜感激。 最佳答案 如果您的类难以实例化以进行测试,则说明您的类在构造函数中做了太多工作或正在做一些工作。http://m
我正在用Laravel编写一个小API,部分目的是为了学习这个框架。我想我在文档中发现了一个漏洞,但这可能是因为我不理解“Laravel方式”来做我想做的事。我正在编写一个HTTPAPI,用于在Linux服务器上列出、创建和删除系统用户等。结构是这样的:到/v1/users的路由将GET、POST和DELETE动词连接到Controller方法分别获取、创建和删除。ControllerApp\Http\Controllers\UserController实际上并不运行系统调用,它是由服务App\Services\Users完成的。该服务由服务提供者App\Providers\Serve
使用PHPUnit,我正在使用->at()测试一系列方法调用,如下所示:$mock->expects($this->at(0))->method('execute')->will($this->returnValue('foo'));$mock->expects($this->at(1))->method('execute')->will($this->returnValue('bar'));$mock->expects($this->at(2))->method('execute')->will($this->returnValue('baz'));如何设置模拟,以便在上述情况下,如
我一直在研究如何将单元测试覆盖范围添加到用PHP编写的大型现有代码库中。静态类和可实例化类中的许多函数调用库或实例化对象以获得与内存缓存和数据库的连接。它们通常看起来像这样:publicfunctiongetSomeData(){$key="SomeMemcacheKey";$cache=get_memcache();$results=$cache->get($key);if(!$results){$database=newDatabaseObject();$sql="SELECT*fromsomeDatabase.someTable";$results=$database->quer
我的代码看起来像这样:classA{functionfoo(&$a,$b){if($a==0){returnfalse;}else{$a=$b+1;returntrue;}}}classB{functionfoo1($a,$b){$a=newA;$a->foo($a,$b);if($a==0){returnfalse;}echo$a;returntrue;}}我需要获取$a的值。如何模拟函数foo()? 最佳答案 PHPUnitclonesthearguments在将它们传递给模拟方法之前。原始参数没有解决方法,但对于对象,您可以a
我正在CakePHP2中测试模型并模拟了这样的模型:$this->User=$this->getMock('User',array('_saveUploadedFile','_removeUploadedFile',));$this->User->expects($this->any())->method('_saveUploadedFile')->with($data,Configure::read('App.myDirectory'),true);->will($this->returnValue(true));$this->User->expects($this->any())-
我正在为我的Controller编写一些单元测试(PHPUnit3.6),并想验证是否触发了正确的操作等。这很容易。然而,一些Controller还通过不受欢迎的模型执行某些操作,例如将记录插入数据库。我知道我需要模拟这些,但不清楚如何进行。采用以下示例Controller(为清楚起见进行了删减):publicfunctionaddAction(){$data=$this->getRequest()->getPost();$model=$this->getModelFactory()->getCompetitionModel()->insert($data);}请注意,我只想验证是否已
问题在PHP中,但适用于使用xUnit框架的任何语言。我想要一个mock,需要140次调用jump方法。我需要验证,至少一次有一个以500作为参数的调用。我不在乎是否所有调用都是500,但我至少需要一个调用了500的调用。$mock=$this->getMock('Trampoline',['jump']);$mock->expects($this->atLeastOnce())->method('jump')->with($this->equalTo(500))->will($this->returnValue(true));$sportsman->setTramploine($mo
我需要为我的应用程序创建一个自动加载器。我不想依赖文件系统中的文件,那么如何模拟新调用?或者如何测试自动加载器类?谢谢。 最佳答案 Orhowdoyoutestanautoloaderclass恕我直言,您根本不需要对自动加载器进行单元测试。如果您引导您的应用程序,它会严重崩溃,因为它可以找到所有需要的类,或者您的自动加载器工作正常。测试套件中的每个测试都将测试自动加载器是否能够加载“被测类”,因此我不会太担心对其进行单元测试。如果您愿意,可以将其称为“作为副作用的集成测试”,但我认为这已经足够了。如果您认为这还不够好,我会将req