私はclojureでメソッドを使用with-redefs
してモックしようとしています。reify
どこから始めればよいかわかりません。メソッドをモックする例を教えてください。この時点で完全に混乱しているため、インターネット上のドキュメントは役に立ちません。
質問する
1335 次
2 に答える
1
bar
関数をスパイ/モック/スタブして、 functionで呼び出された回数をテストしたいとしましょうfoo
。簡単な例は次のとおりです。
(defn bar [] ...)
(defn foo []
(bar)
(bar)
(bar))
(deftest
(let [args (atom [])]
(with-redefs [bar (fn [x] (swap! args conj x))]
(foo)
(is (= (count @args) 3)))))
まあ、上記のコードが少し面倒なのは同意します。次のマクロを試すことができます: (呼び出し履歴をメタデータに入れています)
(defmacro with-mock [vr & body]
`(with-redefs [~vr (with-meta
(fn [& ~'args] (swap! (-> ~vr meta :args) conj ~'args))
{:args (atom [])})]
(do ~@body)))
利用方法:
(with-mock bar
(foo)
(is (= (-> bar meta :args deref count)
3)))
少しのユーティリティ関数を使用すると、上記のマクロは強力なツールになる可能性があります。Clojure の表現力は非常に優れています。
于 2017-01-07T09:44:07.993 に答える