Macro allowing for substitution of functions with predefined values. Taken from "Clojure in action" page 180 Example: (defn calc-x [x1 x2] (* x1 x2)) (defn calc-y [y1 y2] (/ y2 y1)) (defn some-client  (println (calc-x 2 3) (calc-y 3 4))) (stubbing [calc-x 1 calc-y 2 (some-client))
prints: "1 2" instead of "6 4/3"
- (defmacro stubbing [stub-forms & body]
- (let [stub-pairs (partition 2 stub-forms)
- returns (map last stub-pairs)
- stub-fns (map #(list 'constantly %) returns)
- real-fns (map first stub-pairs)]
- `(binding [~@(interleave real-fns stub-fns)]
You need to login to post a comment.