[英]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.