是否有可能以伪造多个接口实现的方式模拟对象? (注意:我正在使用“padraic嘲弄”https://github.com/padraic/mockery)
假设我有一个类Mysql,它实现了Db_Interface和Configurable_Interface,我需要模拟它才能测试另一个类。我想创建一个带有其他名称的模拟器,而不是Mysql(因为它可能会在将来改变或消失,这就是我们使用接口的原因,对吧?),所以我不想做Mockery :: mock('Mysql')
我知道我可以像Mockery :: mock('Db_Interface')一样创建它,它会传递Db_Interface检查的实例。但是我怎么能让它通过另一个接口的检查呢?
@Gordon 好的继承人代码:
$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
答案 0 :(得分:19)
对于任何磕磕绊绊的人。在 Mockery 中,您可以调用Mockery::mock('firstInterface, secondInterface');
来模拟需要实现多个接口的对象。
答案 1 :(得分:3)
$this->getMockBuilder(['A', 'B'])->getMock();
答案 2 :(得分:1)
当有关phpspec的问题时,此线程出现!
所以这是使用phpspec的一种方法:
$prophecy = $this->prophesize(InterfaceA::class);
$prophecy->willImplement(InterfaceB::class);
?
答案 3 :(得分:0)
你需要一个存根。创建一个实现2个接口的类。所有带“return null”的方法。而不是用这个存根创建一个模拟。