[英]Mocking to multiple Interfaces
是否可以通过伪造多个接口实现的方式来模拟对象? (注意:我使用的是“padraic 的嘲讽” https://github.com/padraic/mockery )
假设我有一个 Mysql 类,它实现了 Db_Interface 和 Configurable_Interface,我需要模拟它才能测试另一个类。 我想用另一个名字创建一个模拟,而不是 Mysql(因为它将来可能会改变或消失,这就是我们使用接口的原因,对吧?),所以我不想做 Mockery::mock('Mysql') .
我知道我可以像 Mockery::mock('Db_Interface') 一样创建它,它会通过 instanceof 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
对于任何绊倒这一点的人。 在Mockery 中,您可以调用Mockery::mock('firstInterface, secondInterface');
模拟一个需要实现多个接口的对象。
来源: Mockery README
$this->getMockBuilder(['A', 'B'])->getMock();
当问题是关于 phpspec 时,这个线程就出来了!
所以这里有一种方法可以用 phpspec 做到这一点:
$prophecy = $this->prophesize(InterfaceA::class);
$prophecy->willImplement(InterfaceB::class);
👍
你需要一个存根。 创建一个实现这两个接口的类。 所有带有“返回空值”的方法。 而不是用这个存根创建一个模拟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.