我有一个从AMPQ消息总线中提取消息的函数:
(defn get-message [queue client]
(let [msg (mq/get-message client queue)]
(if msg
(logit msg))))
mq / get-message和logit都是副作用,一个取决于网络访问,另一个取决于本地计算机上的磁盘IO。
在Clojure中是否有一种惯用的单元测试副作用方法?我的第一个想法是模拟/存根,但如果有更好的东西。
答案 0 :(得分:8)
使用core.test
我通常会使用with-redefs
(deftest ampq-messaing
"Test messaging"
(let [logit-msg (atom nil)]
(with-redefs [mq/get-message (fn [] "message")
logit (fn [msg]
(reset! logit-msg msg))]
(let [response (your-test-trigger)]
(is (= "message" @logit-msg))))))
在这种情况下,我正在测试mq
中返回的消息是logit
中使用的消息,我假设your-test-trigger
是触发get-message
调用的消息1}}。