模拟超载-抽象类

时间:2018-09-04 11:46:40

标签: php laravel unit-testing mockery

我对TDD相当陌生,目前正在Laravel项目中编写测试,并且正在使用Mockery库。尝试模拟重载新的类实例时遇到了一个问题。

问题似乎是被模拟的类失去了继承,因此在传递给方法时未通过参数验证。但是,当我创建不带重载子对象的模拟对象时,似乎继承了它。

我必须上名为“父母与子女”的课程。孩子继承了父母。

// 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。

我显然在这里缺少一些关键细节,有人能为我指出吗?

1 个答案:

答案 0 :(得分:0)

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

尝试一下:

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

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