有没有办法使用类似于“提供”的语法来模拟(不是存根)带有 Midje(clojure)的协议函数?
这类似于:Mocking Clojure 协议中的问题,但使用模拟。
更详细地说:我有一个协议和一个函数,它返回实现它的东西。我想对函数进行存根以返回协议的模拟,并且我想注册对模拟协议“实现”的功能之一的期望。
编辑 - 这是一个例子:
有一个协议及其实现:
(defprotocol Thiny (go-bump [_ _]))
(deftype TheThing []
Thiny
(go-bump [_ _] 23))
有一个函数返回协议的实现:
(defn gimme [] (TheThing.))
TheThing可能是数据库或网络连接或您想在测试中摆脱的其他讨厌的东西。
然后,有我要测试的功能:
(defn test-me [n]
(let [t (gimme)]
(-> t (go-bump n))))
我想确保它用n调用go-bump。
这是我第一次尝试创建测试。但这只是完成了一半,我想对 gimme 返回的Thiny设置期望:
(fact
(test-me 42) => 42
(provided (gimme) => (reify Thiny (go-bump [_ n] n))))