Спок: Создание высмеиваемых объектов во время выполнения
Вопрос
У меня есть класс Foo
У этого есть метод Bar makeBar(String id)
. Анкет Как вы можете догадаться, makeBar
Создает новый Bar
объект с идентификатором id
. Bar
есть id
.
Для целей моего теста мне нужно издеваться Foo
. Анкет Я хотел бы насмехаться makeBar
Метод создания издевательства Bar
объекты, для которых Getter возвращает правильный id
(тот, который был дан makeBar
).
Итак, чтобы быть ясным, я хочу создать высмеивающий экземпляр foo
из Foo
так что
foo.makeBar(someId)
Возвращает издевательства Bar
объект bar
для которого
bar.getId() == someID
Есть ли способ сделать это со Споком, или я должен все заглушить?
Решение
Да, можно иметь фиктивное возвращение в другие макет. Это сделает свое дело:
Foo foo = Mock()
foo.makeBar(_) >> { String id ->
Bar bar = Mock()
bar.getId() >> id
bar
}
Я опубликовал полный и запущенный код здесь: http://webconsole.spockframework.org/?id=40001.