Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mockry重载-抽象类_Php_Laravel_Unit Testing_Mockery - Fatal编程技术网

Php 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()

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

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

我必须学习叫做家长和孩子的课程。子对象扩展父对象

// 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()的结果,如果这有意义的话。如果我解决问题的方法不对,请随时打电话给我。谢谢你的回答:)我已经完成了整个项目的重构,但是如果我将来遇到这个问题,我会记住这一点。干杯