Насмешка над несколькими интерфейсами - PullRequest
5 голосов
/ 25 ноября 2010

Возможно ли смоделировать объект так, чтобы он имитировал реализацию нескольких интерфейсов? (Примечание: я использую «издевательство над падраиком» https://github.com/padraic/mockery)

Предположим, у меня есть класс Mysql, который реализует Db_Interface и Configurable_Interface, и который мне нужно смоделировать, чтобы иметь возможность протестировать другой класс. Я хочу создать макет с другим именем, не Mysql (потому что он может измениться или исчезнуть в будущем, поэтому мы используем интерфейсы, верно?), Поэтому я не хочу делать Mockery :: mock ('Mysql') .

Я знаю, что могу создать его как Mockery :: mock ('Db_Interface'), и он пройдет проверку экземпляра 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

Ответы [ 3 ]

19 голосов
/ 29 марта 2012

Для любого, кто сталкивается с этим.В Mockery вы можете вызвать Mockery::mock('firstInterface, secondInterface');, чтобы смоделировать объект, которому необходимо реализовать несколько интерфейсов.

Источник: Mockery README

3 голосов
/ 22 января 2017

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

0 голосов
/ 02 августа 2011

тебе нужна заглушка.создать класс, который реализует 2 интерфейса.все методы с "возвращаемым нулем".чем создать издевательство с этой заглушкой.

...