[英]How to mock model when testing setupController or private Route methods
[英]In clojure test, how to mock out multiple methods when testing one function?
我正在為我的應用程序中的相當大的功能編寫clojure.test單元測試。 該函數對數據庫和外部REST服務進行了多次調用,並進行了一些計算。 例如,我要測試的功能就是這樣
(defn myfunc [id]
(let[
w (some-security-call id)
x (some-db-call id)
y (some-REST-call x)
z ( some-audit-call y)
]
(-> y :somekey )))
為了測試此方法,我想存根或重新定義“ some-audit-call ”和“ some-security-call ”。 Clojure的with-redefs-fn一次只能重新定義一種方法。
有沒有一種標准的方法可以模擬正在單元測試的功能中使用的多個功能?
with-redefs
可以根據需要運行許多功能。 這是我實際生產測試中的編輯示例。
(with-redefs [namespace/redacted (constantly [])
namespace/redacted (fn [& args] (async/go namespace/redacted))
namespace/redacted (constantly [2 4])
namespace/redacted (fn [& args] (namespace/redacted sample-redacted-ads))
namespace/redacted (fn [_ _ redacted & _]
(async/go (cond-> namespace/redacted
namespace/redacted (dissoc redacted))))
namespace/redacted (fn [& args] (async/go nil))
namespace/redacted fake-redacted
namespace/redacted fake-redacted
namespace/redacted namespace/redacted
namespace/redacted (go (constantly []))
namespace/redacted (fn [_] [])
namespace/redacted namespace/redacted
namespace/redacted namespace/redacted
namespace/redacted (fn [_] {:redacted "redacted"})]
(is (= "redacted"
(get-in (<!!
)
))
"We should return the redacted if we don't pass it in")
... many more tests here ...
)
如果需要重新定義要重新定義的另一個函數使用的函數,則必須嵌套對with-redef的調用。 這有時會使人們認為with-redef僅適用於一個功能。
除非您知道有特定原因,否則您可能不想使用with-redefs-fn
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.