PHPunit 和 Mockery:找不到方法
Posted
技术标签:
【中文标题】PHPunit 和 Mockery:找不到方法【英文标题】:PHPunit and Mockery: method not found 【发布时间】:2013-03-24 07:01:18 【问题描述】:我在使用 phpunit 和 Mockery 时遇到问题。由于某种原因,PHPunit 说我在 Mockery 中定义的方法 onFoo
不存在。
public function testReturnsTheCorrectValueWithClass()
$listener = \Mockery::mock('FooListener');
$listener->shouldReceive('onFoo')
->once()
->andReturn('foo');
$this->eventManager->attach('foo.class', array($listener, 'onFoo'));
$this->assertTrue($this->eventManager->dispatch('foo.class') === 'foo');
有人知道这段代码有什么问题吗?
【问题讨论】:
onFoo
是否存在于FooListener
中?
感谢您的回复泽克!实际上,FooListener 只是一个类,它有一个方法 onFoo,并且该方法返回“foo”。 “FooListener”类真的需要存在吗?我教过 Mockery 嘲笑那堂课?再次感谢。
我确信原始类/接口和目标方法都应该存在(虽然不完全确定该方法 - 我从未尝试模拟非真实类,因为它没有任何意义)跨度>
所以我需要用那个方法创建一个类?但是我为什么还要使用 Mockery 呢?谢谢。
mockery(和任何其他模拟库)使您能够设置具有某些已知行为的已知类的实例,以便您可以将其作为依赖项注入到测试对象。更一般的原因 - 是将测试类与其依赖项隔离开来。
【参考方案1】:
我找到了问题的解决方案!它与我的测试代码无关,但与我的 EventManager 获取模拟对象的方式有关。我创建了一个新的模拟对象实例,而不是只使用现有的。
感谢大家的帮助!
【讨论】:
“这与我的测试代码无关”——这很明显。如果类似的代码在一个测试中有效,而在另一个测试中无效 - 那么问题就出在其他地方。 真的!今天学到的另一个教训 :) 我的调试技能需要变得更好。 :)以上是关于PHPunit 和 Mockery:找不到方法的主要内容,如果未能解决你的问题,请参考以下文章
PHPUnit:使用@runTestsInSeparateProcesses 时找不到嘲弄
在此模拟对象上找不到模拟方法 shouldRecieve() [关闭]