7

Python doctest 将简单测试与源代码相关联(在 Python 中,它们位于函数文档中)。 更多信息和示例在这里

Clojure有类似的东西吗?

我知道clojure.test使用defn.

环顾四周,我发现了这个,但它似乎很不简洁(测试是在实际文本中,比如 Python - 当然扩展的宏defn会更可取?)。

或者也许还有其他方法可以解决一般问题,那就是我有一些测试(通常是简单的东西,展示了函数的基本属性),这些测试最好包含在文档中(我使用的是marginia)而不是单独的单元测试文件。

更新 这是一个例子:我有一个函数可以计算从像素矩形到图像中心的(曼哈顿)距离(以像素为单位)。这听起来很简单,但是由于侧面具有奇数或偶数像素的图像的“中心”含义的差异,或者您从块的哪个部分测量,这使得事情变得复杂。所以我不得不写一些测试来把代码弄明白。现在我查看文档,如果文档包含这些测试,那将是最好的,因为它们比文字更好地解释了函数的作用......

4

2 回答 2

11

和元数据中的测试标志,http://clojure.org/special_forms

(defn
 ^{:doc "mymax [xs+] gets the maximum value in xs using > "
   :test (fn []
             (assert (= 42  (mymax 2 42 5 4))))
   :user/comment "this is the best fn ever!"}
  mymax
  ([x] x)
  ([x y] (if (> x y) x y))
  ([x y & more]
   (reduce mymax (mymax x y) more)))

user=> (test #'mymax)
:ok
user=> (doc test)
-------------------------
clojure.core/test
([v])
  test [v] finds fn at key :test in var metadata and calls it,
  presuming failure will throw exception
nil
于 2012-06-05T02:43:57.137 回答
2

:pre 和 :post 表达式怎么样? http://blog.fogus.me/2009/12/21/clojures-pre-and-post/

于 2012-06-05T01:48:16.657 回答