Есть ли способ обмануть (не заглушить) функцию протокола с помощью Midje (clojure), используя что-то вроде «предоставленного» синтаксиса?Реализация замещающих протоколов в Midje
Это похоже на вопрос в: Mocking Clojure protocols, но с насмешкой.
Подробнее: У меня есть протокол и функция, которая возвращает что-то, что ее реализует. Я хотел бы заглушить функцию, чтобы вернуть макет протокола, и я хотел бы зарегистрировать ожидание одной из функций «реализации» издевавшегося протокола.
редактировать - вот пример:
Существует протокол и его реализация:
(defprotocol Thiny (go-bump [_ _]))
(deftype TheThing []
Thiny
(go-bump [_ _] 23))
Существует функция, которая возвращает реализацию протокола:
(defn gimme [] (TheThing.))
TheThing может быть DB или сетевым подключением или какой-либо другой неприятной вещью вы хотите избавиться от теста.
Тогда есть функция я хочу тест:
(defn test-me [n]
(let [t (gimme)]
(-> t (go-bump n))))
Я хочу, чтобы убедиться, что он называет гоу-врезаться с п.
Это моя первая попытка создать тест. Но это только наполовину сделано, я хотел бы ожидание установки на Thiny возвращаемых Дай мне:
(fact
(test-me 42) => 42
(provided (gimme) => (reify Thiny (go-bump [_ n] n))))
Хорошо, вы избегаете создания« диспетчерского объекта », некоторые из предложений по проблеме github были также насчет насмешек 'defrecord' –
Это старый вопрос, но он по-прежнему актуальный. В Appareant вы не можете высмеивать функцию по протоколу, если вы также не издеваетесь над созданием объекта, который создает реализацию протокола. Или что-то типа того. –