模拟多个接口

Hap*_*per 5 php unit-testing mocking

是否有可能以伪造多个接口实现的方式模拟对象?(注意:我正在使用"padraic嘲弄" https://github.com/padraic/mockery)

假设我有一个类Mysql,它实现了Db_Interface和Configurable_Interface,我需要模拟它才能测试另一个类.我想创建一个带有其他名称的模拟器,而不是Mysql(因为它可能会在将来改变或消失,这就是我们使用接口的原因,对吧?),所以我不想做Mockery :: mock('Mysql') .

我知道我可以创建它像Mockery :: mock('Db_Interface'),它将传递Db_Interface检查的实例.但是我怎么能让它通过其他接口的检查呢?

@Gordon ok继承人的代码:

$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
Run Code Online (Sandbox Code Playgroud)

Lum*_*dil 19

对于任何磕磕绊绊的人.在Mockery中,您可以调用Mockery::mock('firstInterface, secondInterface');模拟需要实现多个接口的对象.

资料来源:Mockery README

  • 这有点麻烦,只要确保你传入的参数是一个整个字符串(`Mockery :: mock('interface,interface2'`),而不是两个字符串(`Mockery :: mock('interface', 'interface2'.).万一你无法弄清楚为什么它不能正常工作. (7认同)
  • 我用Mockery 0.9.4测试了这个,并且有两个独立字符串的符号为我工作(`Mockery :: mock('interface','interface2'`) (4认同)