Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing Compojure/ring应用程序,在测试范围外初始化数据库_Unit Testing_Clojure_Compojure_Ring_Korma - Fatal编程技术网

Unit testing Compojure/ring应用程序,在测试范围外初始化数据库

Unit testing Compojure/ring应用程序,在测试范围外初始化数据库,unit-testing,clojure,compojure,ring,korma,Unit Testing,Clojure,Compojure,Ring,Korma,如何初始化数据库,使我的(def db…)在运行单元测试时不会尝试初始化数据库(因为那时它将不是一个数据库) 我模仿函数中的sql和dml(使用REDEF),但到目前为止,我发现的所有示例都只是直接在名称空间中定义数据库(例如,没有包装在函数中)。我强烈建议不要将数据库放在变量中。这是一种非常诱人但非常有害的环境耦合形式 建议的方法是将数据库作为函数体中需要访问的函数的参数传递给数据库: ;; BAD (def db ...) (defn find-user [user-id] (run-

如何初始化数据库,使我的(def db…)在运行单元测试时不会尝试初始化数据库(因为那时它将不是一个数据库)


我模仿函数中的sql和dml(使用REDEF),但到目前为止,我发现的所有示例都只是直接在名称空间中定义数据库(例如,没有包装在函数中)。

我强烈建议不要将数据库放在变量中。这是一种非常诱人但非常有害的环境耦合形式

建议的方法是将数据库作为函数体中需要访问的函数的参数传递给数据库:

;; BAD
(def db ...)

(defn find-user [user-id]
  (run-query find-user-query db user-id))

;; GOOD
(defn find-user [db user-id]
  (run-query find-user-query db user-id))
它并不像您想象的那样乏味,而且好处很大(对于测试、repl驱动的开发等)


注:

在Clojure社区的早期,人们一直使用动态变量来避免一直添加参数

(def ^:dynamic db nil)

(binding [db ...]
  (find-user user-id))
<>我们学会了停止这样做:)把你的逻辑与它的环境联系起来只是你的程序的一个坏基础。