我最近开始处理一个数据库密集型的Clojure应用程序,并试图设置一些单元测试。理想情况下,我希望通过模拟来避免实际访问真实数据库。
这是一个简单测试的示例:
test-core.clj
(deftest core-test
(is (> (count (fn-under-test "foo")) 0)))
core.clj
(defn fn-under-test [slug]
(db/query "select * from %1" slug))
db.clj
(defn query [q & args]
(sql/with-connection db
(sql/with-query-results res
[(clause q args)]
(doall res))))
我的问题是:是否可以在test-core.clj内部绑定自定义函数到'db/query',以便core.clj使用它,而不是在db.clj中定义的内容?
谢谢!
binding
只有在变量被声明为具有动态元数据时才能工作。使用with-redefs
代替可以避免这个问题。 - Ming