Testing 在midje中模拟函数调用

Testing 在midje中模拟函数调用,testing,clojure,stubbing,redefinition,midje,Testing,Clojure,Stubbing,Redefinition,Midje,假设我有一个函数 (defn extenal_api_fn [stuff] ... do things.... ) (defn register_user [stuff] (external_api_fn stuff)) 然后是测试 (def stuff1 {:user_id 123 }) (def stuff2 {:user_id 234}) (background (external_api_fn stuff1) => true (wi

假设我有一个函数

(defn extenal_api_fn [stuff]
   ... do things....
)

(defn register_user [stuff]
  (external_api_fn stuff))
然后是测试

(def stuff1
  {:user_id 123 })

(def stuff2
  {:user_id 234})

(background (external_api_fn stuff1) => true
            (with-redefs [external_api_fn (fn [data] (println "mocked function"))]
            (register_user stuff1) => true)
            (register_user stuff2) => true)

(facts "stuff goes here"
  (fact "user that registers correctly
    (= 1 1) => truthy)
  (fact "user that has a registration failure"
    (= 1 2) => falsy))
这与

"you never said #'external_api_fn" would be called with these arguments:
    contents of stuff1

为了模拟内部事务失败,存根此函数调用(仅在某些情况下)的好方法是什么。

您可以使用Midje提供的

(fact
  (register_user stuff1) => :registered
  (provided
    (extenal_api_fn stuff1) => :registered))

(fact
  (register_user stuff2) => :error
  (provided
    (external_api_fn stuff2) => :error))
您还可以使用
anything
代替函数参数,存根函数以返回值,而不管输入参数是什么:

(fact
  (register_user stuff2) => :error
  (provided
    (external_api_fn anything) => :error))