【发布时间】: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