Clojure相当于Python doctest?

时间:2012-06-05 01:45:52

标签: unit-testing clojure marginalia

Python doctests将简单测试与源代码相关联(在Python中,它们位于函数文档中)。 More info and examples here

Clojure有什么类似的东西吗?

我知道使用clojure.test的单元测试,但是寻找与源更紧密集成的东西(通常单元测试在不同的文件中;这里我想在{{1}内部进行测试})。

搜索我发现this,但它看起来非常不l(测试是在实际文本中,就像Python一样 - 当然,扩展defn的宏会更好吗?)。

或许还有其他方法可以解决一般问题,即我有一些测试(通常是简单的事情,演示了函数的基本属性),这些测试会更好地包含在文档中(我使用{{3而不是在单独的单元测试文件中。

update 这是一个例子:我有一个函数可以计算从像素矩形到图像中心的(曼哈顿)距离(以像素为单位)。这听起来很简单,但是由于边缘上有奇数或偶数像素的图像的“中心”含义不同,或者你测量的块的哪个部分,这种情况很复杂。所以我不得不写一些测试来直接获得代码。现在我看看文档,如果文档包含那些测试,那将是最好的,因为它们比函数更好地解释函数的作用......

2 个答案:

答案 0 :(得分:10)

和元数据中的测试标记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

答案 1 :(得分:1)

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