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

标签: php phpunit mockery


【解决方案1】:

我找到了问题的解决方案!它与我的测试代码无关,但与我的 EventManager 获取模拟对象的方式有关。我创建了一个新的模拟对象实例,而不是只使用现有的。

感谢大家的帮助!

【讨论】:

  • “这与我的测试代码无关”——这很明显。如果类似的代码在一个测试中有效,而在另一个测试中无效 - 那么问题就出在其他地方。
  • 真的!今天学到的另一个教训 :) 我的调试技能需要变得更好。 :)
猜你喜欢
  • 2014-08-16
  • 2013-05-24
  • 2015-11-15
  • 2014-08-24
  • 2021-06-23
  • 2016-09-17
  • 2018-05-26
  • 2013-08-26
  • 2014-03-21
相关资源
最近更新 更多