繁体   English   中英

Laravel Mockery - 将一个带有依赖项的类注入构造函数

[英]Laravel Mockery - Mocking a class with dependencies injected into constructor

我试图用它自己的构造函数依赖项来模拟一个类。 我正在使用Laravel 5.2。

class A {
    public function something() {}
}    

class B {
  protected $a;
  public function __construct(A $a) {
    $this->a = $a;
  }

  public function getA() {
    return $this->a->something();
  }
}

MockingTest extends TestCase {

  public function testItGetsSomething() {
    $m = Mockery::mock('B');
    $m->shouldReceive('getA')->once()->andReturn('Something');
  }
}

我知道我可以将ClassB.__construct(A $a)更改为:

  public function __construct(A $a = null) {
    $this->a = $a ?: new A();
  }

但是有更好/更清洁的方法吗? 如果有更可接受的方法,我不想仅仅为了单元测试而改变我的构造函数代码。

我不是100%确定你想测试什么,但如果你想模拟B类中的类A实例,你可以在创建B的新实例时注入一个模拟版本的A:

$mockA = Mockery::mock('A');
$mockA->shouldReceive('something')->once()->andReturn('Something');

$classBwithMockedA = new B($mockA);

然后你可以做一下(如果你想测试B类中的getA方法):

$this->assertEquals('Something', $classBwithMockedA->getA());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM