Php mockry重载-抽象类
我是TDD的新手,目前正在一个Laravel项目中编写测试,我正在使用Mockry库。我在尝试模拟重载新类实例时遇到了一个问题 问题似乎是模拟类失去了继承性,因此在传递给方法时没有传递参数验证。然而,当我在不重载的情况下创建子对象的模拟时,它的继承似乎被拾取了 我必须学习叫做家长和孩子的课程。子对象扩展父对象Php mockry重载-抽象类,php,laravel,unit-testing,mockery,Php,Laravel,Unit Testing,Mockery,我是TDD的新手,目前正在一个Laravel项目中编写测试,我正在使用Mockry库。我在尝试模拟重载新类实例时遇到了一个问题 问题似乎是模拟类失去了继承性,因此在传递给方法时没有传递参数验证。然而,当我在不重载的情况下创建子对象的模拟时,它的继承似乎被拾取了 我必须学习叫做家长和孩子的课程。子对象扩展父对象 // Test public function test() { Mockery::mock('overload:Child'); $results = service()
// 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期望的是父对象,而不是子对象。
我显然遗漏了一些重要的细节,有人能帮我指出吗?我遇到了同样的问题。我们可以将基类作为第二个参数传递。这将修复类型错误 试试这个:
mockry::mock('overload:Child','Parent');
或
mockry::mock('重载:'.Child::class,Parent::class);
这听起来像是预期的行为。你和哪一个有麻烦?它给了你什么,你期望什么?谢谢你的快速回复,乔恩!问题是,我试图隔离单元测试,以便只关心service()函数中的逻辑。因此,基本上,我希望防止触发新子实例的构造,同时也使用shouldReturn()控制serviceMethod()的结果,如果这有意义的话。如果我解决问题的方法不对,请随时打电话给我。谢谢你的回答:)我已经完成了整个项目的重构,但是如果我将来遇到这个问题,我会记住这一点。干杯