Unit testing 如何为私有clojure函数编写单元测试?
我想使用defn-为定义为私有的函数编写单元测试。如何执行此操作?事实证明,您可以使用reader宏#或var来引用要测试的私有函数。如果私有函数位于命名空间a.b中且名称为c:Unit testing 如何为私有clojure函数编写单元测试?,unit-testing,clojure,private,Unit Testing,Clojure,Private,我想使用defn-为定义为私有的函数编写单元测试。如何执行此操作?事实证明,您可以使用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))))))
(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))))))
以下是关于此主题的对话: 我建议您不要使用
defn-
编写私有函数,而是将私有函数放在单独的命名空间中(因此clj
文件,例如utils.clj
)
然后你:
(:Require[yourappname.utils:refere:all])
然后,API的任何用户都不会看到或访问这些帮助函数,当然,除非他们需要utils文件,这可能意味着他们知道自己在做什么。使用语法
#'a.b/d
是(var a.b/d)
的快捷方式,返回指向“函数”的“var”。当Clojure看到var时,它会在求值之前自动替换函数。几年来我发现这种行为(大部分是未记录的)相当令人困惑。@AlanThompson-Huh,看起来像clojure.lang.Var
implementsIFn
。我不知道。我想这是有一定道理的……有点悲哀,private在clojure中被修补了,你可以用它在nREPL中执行私有函数,这对了解你不熟悉的代码库非常有用!