【发布时间】: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(和任何其他模拟库)使您能够设置具有某些已知行为的已知类的实例,以便您可以将其作为依赖项注入到测试对象。更一般的原因 - 是将测试类与其依赖项隔离开来。