Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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 如何为私有clojure函数编写单元测试?_Unit Testing_Clojure_Private - Fatal编程技术网

Unit testing 如何为私有clojure函数编写单元测试?

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))))))

我想使用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))))))

以下是关于此主题的对话:

我建议您不要使用
defn-
编写私有函数,而是将私有函数放在单独的命名空间中(因此
clj
文件,例如
utils.clj

然后你:

  • 在需要私有函数的地方需要此文件,例如在API定义中使用类似
    (:Require[yourappname.utils:refere:all])
  • 在测试命名空间中需要此文件来测试函数

  • 然后,API的任何用户都不会看到或访问这些帮助函数,当然,除非他们需要utils文件,这可能意味着他们知道自己在做什么。

    使用语法
    #'a.b/d
    (var a.b/d)
    的快捷方式,返回指向“函数”的“var”。当Clojure看到var时,它会在求值之前自动替换函数。几年来我发现这种行为(大部分是未记录的)相当令人困惑。@AlanThompson-Huh,看起来像
    clojure.lang.Var
    implements
    IFn
    。我不知道。我想这是有一定道理的……有点悲哀,private在clojure中被修补了,你可以用它在nREPL中执行私有函数,这对了解你不熟悉的代码库非常有用!