All*_*ate 4 unit-testing side-effects clojure
我有一个从AMPQ消息总线中提取消息的函数:
(defn get-message [queue client]
(let [msg (mq/get-message client queue)]
(if msg
(logit msg))))
Run Code Online (Sandbox Code Playgroud)
mq/get-message和logit都是副作用,一个取决于网络访问,另一个取决于本地计算机上的磁盘IO.
在Clojure中是否有一种惯用的单元测试副作用?我的第一个想法是模拟/存根,但如果有更好的东西.
使用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))))))
Run Code Online (Sandbox Code Playgroud)
在那种情况下,我正在测试返回的消息mq是使用的logit,我假设这your-test-trigger是触发调用的东西get-message.
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |