大佬教程收集整理的这篇文章主要介绍了unit-testing – 如何模拟CakePHP行为以进行单元测试,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
情况
我的模型使用行为在本地保存后将更改发送到API.我想假装在测试期间对API进行的所有调用(这些将单独测试)以节省API服务器的负载,更重要的是,实际上不保存更改:-)
我正在使用Cakephp 2.4.1.
我试过的
>阅读文档. The manual显示了如何为组件和助手执行此操作,但不为行为执行此操作.
>谷歌.我发现了什么:
> A Google Group post说它简直“不可能”.我不回答任何问题.
> An article解释如何模拟对象.非常接近.
该文章的代码如下:
$provider = $this->getmock('OurProvider',array('geTinfo')); $provider->expects($this->any()) ->method('geTinfo') ->will($this->returnValue('200'));
这可能是错误的方向,但我认为这可能是一个良好的开端.
我想要的是
有效地:一段代码,用于演示如何在Cakephp模型中模拟行为以进行单元测试.
也许这个问题会导致添加Cakephp手册作为额外的奖励,因为我觉得它在那里缺失.
在此先感谢您的努力!
更新(2013-11-07)
我找到了this related question,它应该回答这个问题(部分).无需模拟API,而是可以创建模型将使用的行为测试.
我想弄清楚BehaviorTest应该是什么样子.
与许多类一样,行为是added to the class registry,使用类名作为键,以及后续请求同一对象loaded from the classregistry.因此,模拟行为的方法只是在使用它之前将其放入类注册表中.
完整示例:
<?php App::uses('AppModel','Model'); class Example extends AppModel { } class TESTBehavior extends ModelBehavior { public function foo() { throw new \Exception('Real method called'); } } class BehaviorExampleTest extends CakeTESTCase { /** * testNormalBehavior * * @expectedException Exception * @expectedExceptionmessage Real method called * @return void */ public function testNormalBehavior() { $model = ClassRegistry::init('Example'); $model->Behaviors->attach('Test'); $this->asserTinstanceOf('TESTBehavior',$model->Behaviors->Test); $this->assertSame('TESTBehavior',get_class($model->Behaviors->Test)); $this->assertSame(['foo' => ['Test','foo']],$model->Behaviors->methods()); $model->foo(); } public function testmockedBehavior() { $mockedBehavior = $this->getmock('TESTBehavior',['foo','bar']); ClassRegistry::addObject('TESTBehavior',$mockedBehavior); $model = ClassRegistry::init('Example'); $model->Behaviors->attach('Test'); $this->asserTinstanceOf('TESTBehavior',$model->Behaviors->Test); $this->assertNotSame('TESTBehavior',get_class($model->Behaviors->Test)); $expected = [ 'foo' => ['Test','foo'],'bar' => ['Test','bar'],'expects' => ['Test','expects'],// noise,due to being a mock 'staticExpects' => ['Test','staticExpects'],due to being a mock ]; $this->assertSame($expected,$model->Behaviors->methods()); $model->foo(); // no exception thrown $mockedBehavior ->expects($this->once()) ->method('bar') ->will($this->returnValue('something special')); $return = $model->bar(); $this->assertSame('something special',$return); } }
以上是大佬教程为你收集整理的unit-testing – 如何模拟CakePHP行为以进行单元测试全部内容,希望文章能够帮你解决unit-testing – 如何模拟CakePHP行为以进行单元测试所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。