Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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
在PHPUnit/Laravel中将模拟对象作为实例传递_Php_Laravel_Phpunit_Mockery - Fatal编程技术网

在PHPUnit/Laravel中将模拟对象作为实例传递

在PHPUnit/Laravel中将模拟对象作为实例传递,php,laravel,phpunit,mockery,Php,Laravel,Phpunit,Mockery,我在模仿一个对象并编写一个测试,就像这样 public function test_mocked_object(){ $purchase = new Purchase(); $purchase_m = \Mockery::mock($purchase); $purchase_m->shouldReceive('internalMethod')->andReturn('GOLD'); $purchase_m->testMethod('test')

我在模仿一个对象并编写一个测试,就像这样

public function test_mocked_object(){
    $purchase = new Purchase();
    $purchase_m = \Mockery::mock($purchase);
    $purchase_m->shouldReceive('internalMethod')->andReturn('GOLD');

    $purchase_m->testMethod('test');
}
public function testMethod($string){
    $this->internalMethod();
}
testMethod()
包含对
internalMethod()
的调用,如下所示

public function test_mocked_object(){
    $purchase = new Purchase();
    $purchase_m = \Mockery::mock($purchase);
    $purchase_m->shouldReceive('internalMethod')->andReturn('GOLD');

    $purchase_m->testMethod('test');
}
public function testMethod($string){
    $this->internalMethod();
}
。。。但是当执行到达调用
$this->internalMethod()
时,
$this
现在是原始
$purchase
对象的实例,而不是
$purchase\m
模拟对象的实例

因此,对
$this->internalMethod()
的函数调用不会像我们希望的那样返回“GOLD”


任何指点都将不胜感激

呵呵,别客气!解决了

$shpm \Mockery::mock(Purchase::class)->makePartial();
通过创建实例,可以在调用实例上的方法时保持实例的完整性


希望这对别人有帮助

呵呵,别客气!解决了

$shpm \Mockery::mock(Purchase::class)->makePartial();
通过创建实例,可以在调用实例上的方法时保持实例的完整性

希望这对别人有帮助