【发布时间】:2011-05-15 14:38:09
【问题描述】:
是否可以模拟一个对象以伪造多个接口实现? (注:我用的是“padraic的嘲讽”https://github.com/padraic/mockery)
假设我有一个 Mysql 类,它实现了 Db_Interface 和 Configurable_Interface,我需要模拟它以便能够测试另一个类。我想用另一个名字创建一个模拟,而不是 Mysql(因为它将来可能会改变或消失,这就是我们使用接口的原因,对吧?),所以我不想做 Mockery::mock('Mysql') .
我知道我可以像 Mockery::mock('Db_Interface') 那样创建它,它会通过 instanceof Db_Interface 检查。但是如何让它也通过其他接口的检查呢?
@戈登 好的,代码如下:
$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
【问题讨论】:
-
TestSubject 中的依赖类型是如何强制执行的?
-
我无法让 var_dump($my_mock instanceof Db_Interface) 打印出“真”。这就是我所需要的
-
@Happy 你能显示一些代码吗?
-
我编辑了帖子以添加代码
-
@Happy 抱歉,这不是我一直在问的。您如何在 TestSubject 中强制执行依赖项的类型。也就是说,你如何确保 mysql 实际上实现了这些接口。此外,您的 TestSubject 是否需要在两个接口中定义的方法,还是只依赖一个接口中的方法?
标签: php unit-testing mocking