Laravel 的嘲弄不会模拟方法
Posted
技术标签:
【中文标题】Laravel 的嘲弄不会模拟方法【英文标题】:Mockery with Laravel don't mocks a method 【发布时间】:2018-04-05 00:48:17 【问题描述】:我使用 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
...
【问题讨论】:
【参考方案1】:问题是,你用一个对象而不是一个类来创建你的模拟,正确的代码,以满足你的要求是这样的:
$mock = Mockery::mock($class)->makePartial();
发生的事情是你在嘲笑对象。当 ToTest
对象已经初始化时,模拟只覆盖了 filters
方法,而 callMe
保持不变。如果您尝试使用旧代码转储print_r($toTest->filters());
,它将返回"not original"
。
【讨论】:
以上是关于Laravel 的嘲弄不会模拟方法的主要内容,如果未能解决你的问题,请参考以下文章