【问题标题】:Mockery with Laravel don't mocks a methodLaravel 的嘲弄不会模拟方法
【发布时间】: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...

【问题讨论】:

    标签: laravel testing mockery


    【解决方案1】:

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

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

    发生的事情是你在嘲笑对象。当 ToTest 对象已经初始化时,模拟只覆盖了 filters 方法,而 callMe 保持不变。如果您尝试使用旧代码转储print_r($toTest->filters());,它将返回"not original"

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 2015-07-17
      • 2014-01-29
      • 2016-07-12
      • 2016-08-03
      • 2017-09-01
      • 2017-12-27
      • 2016-12-26
      • 2020-09-06
      相关资源
      最近更新 更多