【发布时间】:2016-09-25 01:43:18
【问题描述】:
我想为使用 defn- 定义为私有的函数编写单元测试。我该怎么做?
【问题讨论】:
标签: unit-testing clojure private
我想为使用 defn- 定义为私有的函数编写单元测试。我该怎么做?
【问题讨论】:
标签: unit-testing clojure private
原来你可以使用reader宏#'或者var来引用要测试的私有函数。如果私有函数在命名空间 a.b 中并且名称为 c:
(ns a.b-test
(:use
[clojure test]))
(deftest a-private-function-test
(testing "a private function"
(let [fun #'a.b/c]
(is (not (fun nil))))))
【讨论】:
#'a.b/d 是(var a.b/d) 的快捷方式,返回指向“函数”a.b/d 的“var”。当 Clojure 看到 var 时,它会在计算之前自动替换该函数。几年来,我发现这种(主要是未记录的)行为非常令人困惑。
clojure.lang.Var 实现了IFn。我不知道。我想它有一定的意义......
在此处关注此主题的对话:https://groups.google.com/forum/#!msg/clojure/mJqplAdt3TY/GjcWuXQzPKcJ
我建议您不要使用 defn- 编写私有函数,而是将您的私有函数放在单独的命名空间中(因此是 clj 文件,例如 utils.clj)。
那么你:
(:require [yourappname.utils :refer :all]) 之类的内容
然后,您的 API 的任何用户都不会看到或访问这些帮助函数,除非他们当然需要 utils 文件,这大概意味着他们知道自己在做什么。
【讨论】: