开发者

Mocking to multiple Interfaces

Is it possible to mock an object in a way that it fakes multiple interfaces implementations? (Note: I am using "padraic's mockery" https://github.com/padraic/mockery)

Suppose I have a class Mysql, which implements Db_Interface and Configurable_Interface, and which I need to mock just to be able to test another class. I want to create a mock with another name, not Mysql (because it could change or disappear in the future, that's why we use interfaces, right?), so I don't want to do Mockery::mock('Mysql').

I know I could create it like Mockery::mock('Db_Interface') and it would pass the instanceo开发者_运维问答f Db_Interface check. But how can I make it pass the check for the other interface too?

@Gordon ok heres the code:

$m = Mockery::mock('Configurable_Interface');
var_dump($m instanceof Configurable_Interface); // true
var_dump($m instanceof Db_Interface); // false of course, since I don't know how to make a mock implement 2 interfaces


For anyone stumbling into this. In Mockery, you can call Mockery::mock('firstInterface, secondInterface'); to mock an object wich needs to implement multiple interfaces.

Source: Mockery README


$this->getMockBuilder(['A', 'B'])->getMock();


This thread comes out when the question is about phpspec !

So here is a way to do it with phpspec:

$prophecy = $this->prophesize(InterfaceA::class);
$prophecy->willImplement(InterfaceB::class);

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜