Laravel的嘲弄不会嘲笑一种方法

时间:2017-10-24 09:26:50

标签: laravel testing mockery

我使用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 个答案:

答案 0 :(得分:1)

问题是,你从一个对象而不是一个类创建你的模拟,正确的代码,以满足你的要求将是这样的:

        $mock = Mockery::mock($class)->makePartial();

发生了什么事是你在嘲笑对象。当ToTest对象已初始化时,模拟仅覆盖filters方法,保留callMe完整。如果您尝试使用旧代码转储print_r($toTest->filters());,则会返回"not original"