[英]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.