Clojure中与Python doctest相对应的是什么?

7

Python doctests可以将简单的测试用例与源代码关联起来(在Python中它们在函数文档中)。这里有更多信息和示例

是否有类似于Clojure的东西?

我知道使用clojure.test进行单元测试,但是希望有一些与源码更紧密集成的东西(通常单元测试位于不同的文件中;这里我想在defn内部进行测试)。

搜索后,我发现了这个,但它看起来非常不像Lisp(测试实际上是文本,类似于Python - 当然,一个扩展defn的宏会更好吧?)。

或者也许还有其他解决通用问题的方法,即我有一些测试(通常是演示函数基本属性的简单内容),最好包含在文档中(我使用marginalia),而不是在单独的单元测试文件中。

更新这里有一个例子:我有一个函数,用于计算从像素矩形到图像中心的(曼哈顿)距离(以像素为单位)。这听起来很简单,但是由于奇偶数像素边缘的中心点意义不同或您从哪个部分测量块等问题而变得复杂。因此,我必须编写一些测试才能使代码正确无误。现在我看着文档,最好将这些测试包含在文档中,因为它们比文字更能说明函数的作用...

2个回答

13

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

看起来很完美!我不知道它的存在。但是你怎么运行它?lein test会调用它吗? - andrew cooke
使用测试函数:(test #'mymax),文档:http://clojuredocs.org/clojure_core/clojure.core/test - number23_cn

2

哦,很可爱,也很接近,但它不能让我给出具体的例子。我会在问题中添加一个示例,这可能更好地展示我想要的东西。 - andrew cooke
:pre:post 条件适用于合同,但不太适用于测试。 - ivant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接