【问题标题】:Mockery Overload - Abstract Class嘲弄重载 - 抽象类
【发布时间】:2019-02-09 10:43:59
【问题描述】:

我是 TDD 的新手,我目前正在 Laravel 项目中编写测试,我正在使用 Mockery 库。尝试模拟重载新类实例时遇到问题。

问题似乎是模拟类失去了继承,因此在传递给方法时没有通过参数验证。但是,当我在不重载的情况下创建 Child 的模拟时,它的继承似乎被拾取。

我必须上名为 Parent 和 Child 的课程。子扩展父。

// Test
public function test() {
    Mockery::mock('overload:Child');
    $results = service();
}

// Functions
public function service() {
    $child = new Child();
    serviceMethod($child);
}

public function serviceMethod(Parent $o) {
    // Do something
}

这会返回 serviceMethod 需要 Parent,而不是 Child。

我显然在这里遗漏了一些重要的细节,有人可以为我指出吗?

【问题讨论】:

  • 这听起来像是预期的行为。你遇到了哪一个问题?它给了你什么,你期待什么?
  • 感谢乔恩的快速回复!问题是我试图隔离单元测试只关心 service() 函数中的逻辑。所以基本上我想防止触发新子实例的构造,同时用 shouldReturn() 控制 serviceMethod() 的结果,如果这有任何意义的话。如果我解决问题的方法有误,请随时给我打电话。

标签: php laravel unit-testing mockery


【解决方案1】:

我遇到了同样的问题。我们可以将基类作为第二个参数传递。这将修复类型错误。

试试这个:

Mockery::mock('overload:Child', 'Parent');

Mockery::mock('overload:' . Child::class, Parent::class);

【讨论】:

  • 感谢回复:) 我已经完成了整个项目的重构,但是如果以后遇到问题我会记住的。干杯!
猜你喜欢
  • 2017-06-28
  • 2017-09-01
  • 2014-01-16
  • 2019-08-03
  • 2014-10-27
  • 2017-05-12
  • 2018-12-24
  • 2017-05-23
  • 2015-11-22
相关资源
最近更新 更多