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

时间:2017-05-30 14:25:09

标签: 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');
}

testMethod()包含对internalMethod()的调用,如此...

public function testMethod($string){
    $this->internalMethod();
}

...但是当执行到达$this->internalMethod()的调用时,$this现在是原始$purchase对象的实例,而不是$purchase_m的实例模拟对象。

因此,对$this->internalMethod()的函数调用不会返回" GOLD"正如我们所希望的那样。

任何指针都将非常感激。

1 个答案:

答案 0 :(得分:0)

嘿嘿嘿嘿!解决了它。

$shpm \Mockery::mock(Purchase::class)->makePartial();

通过创建partial mock,可以在调用方法时保持实例不变。

希望这有助于某人!