我嘲笑一个物体,然后像这样写一个测试......
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"正如我们所希望的那样。
任何指针都将非常感激。
答案 0 :(得分:0)
$shpm \Mockery::mock(Purchase::class)->makePartial();
通过创建partial mock,可以在调用方法时保持实例不变。
希望这有助于某人!