Clojure 内置了测试框架 clojure.test
,它很简单好用。但喜欢其他测试风格的人们也完成了不少其他框架。例如 Midje。它的设计目标是支持从顶到下的测试,很容易写出隔离调用的真正的单元测试:
clojure
(defn my-formula [n] (+ (pow n 2) 5)) (fact "my-formula 函数使用 pow 函数结果加上5" (my-formula 3) => 5 (provided (pow 3) => 0))
通过 provided
段,就成功地将 pow
函数的效果在测试中本地化。这样不论 pow 函数内部的逻辑是否正确,我们的这个 fact 能独立地验证 my-formular
函数的正确性。
当然,我们注意到这种做法是白盒测试,上述测试的另一个好处是明确地说明了 my-formula
函数的依赖。
Midje 的其他方便性在于其语法,非常简洁清晰,当然有点不 clojure。它的左边一般不加什么处理,仅仅是被测函数调用,而右边不仅仅是结果,不光能进行等值测试,还可以用测试函数来比较。
clojure
(fact (sort [3 1 4 2]) => (just #{1 2 3 4}))
例如常用的 just
比较函数,可以”聪明匹配“,它看到自己的参数是一个 set,就知道我们仅关心结果的内容,而非其次序。要比 clojure.test 中我们的写法更为清晰:
clojure
(is (= #{1 2 3 4} (hash-set (sort [3 1 4 2]))))
Midje 的其他用法请看它自己的文档。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。