我使用Laravel 5.5并尝试模拟一个类的公共方法,该类在此类中使用:
class ToTest {
public function filters() {
return 'original';
}
public function callMe() {
return $this->filters();
}
}
这是我的测试代码:
public function it_should_call_bla_bla()
{
$mock = $this->mock(ToTest::class);
$mock->shouldReceive('filters')->andReturn('not orignial');
$toTest = app(ToTest::class);
print_r($toTest->callMe());
}
private function mock($class)
{
$mock = Mockery::mock(app($class))->makePartial();
$this->app->instance($class, $mock);
return $mock;
}
$toTest->callMe()
返回original
...
答案 0 :(得分:1)
问题是,你从一个对象而不是一个类创建你的模拟,正确的代码,以满足你的要求将是这样的:
$mock = Mockery::mock($class)->makePartial();
发生了什么事是你在嘲笑对象。当ToTest
对象已初始化时,模拟仅覆盖filters
方法,保留callMe
完整。如果您尝试使用旧代码转储print_r($toTest->filters());
,则会返回"not original"
。