2016-09-02 6 views
0

私は、アプリケーションでかなり大きな関数用のclojure.test単体テストを書いています。この関数は、dbと外部RESTサービスをいくつか呼び出し、いくつかの計算を行います。 は、例えば、私の機能をテストするために、このメソッドをテストする目的のためにそうclojureテストでは、1つの関数をテストするときに複数のメソッドをモックする方法はありますか?

(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))) 

のようなものです、私はスタブまたは再定義したい「をいくつかの監査-呼び出すを」と「一部、[セキュリティを "と呼んでください。 Clojureの-redefs-fnは、一度に1つのメソッドを再定義します。

ユニットテストされている関数で使用されている複数の関数をモックアウトする標準的な方法はありますか?

答えて

0

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 ... 

) 

あなたは、あなたが巣にして-REDEFへの呼び出しを持って再定義したい別の関数で使用される関数を再定義する必要がある場合。これは時にはwith-redefsが1つの関数でしか動作しないと考えるようになることがあります。

具体的な理由がわかっていない限り、with-redefs-fnを使用したくない可能性があります。

関連する問題