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

时间:2016-05-26 21:24:01

标签: unit-testing clojure private

我想使用defn-为定义为私有的函数编写单元测试。我怎么能这样做?

2 个答案:

答案 0 :(得分:15)

事实证明,你可以使用阅读器宏#'或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))))))

答案 1 :(得分:0)

在此之后进行有关此主题的对话:https://groups.google.com/forum/#!msg/clojure/mJqplAdt3TY/GjcWuXQzPKcJ

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

那么你:

  1. 需要此文件的地方需要专用功能,例如在您的API定义中使用(:require [yourappname.utils :refer :all])
  2. 在测试名称空间中需要此文件以测试功能。

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

相关问题