用clojure实现《实用Common Lisp编程》中的单元测试框架
(ns simple-test-frame.core)(def ^:dynamic *test-name* nil)(defn report-result [result form] (if result (println "pass ... " *test-name* ":" form) (println "fail ... " *test-name* ":" form)) result)(defn combine-results [& forms] (every? true? forms))(defmacro check [& forms] `(combine-results ~@(for [form forms] `(report-result ~form '~form))))(defmacro deftest [fn-name fn-parameters & fn-body] `(defn ~fn-name ~fn-parameters (binding [*test-name* '~fn-name] ~@fn-body)))