你更喜欢哪一个,为什么?每个的优缺点是什么?在哪种情况下,每个都比其他测试框架更出色?
我特别关注midje vs. clojure.test,但也可以提及其他Clojure测试框架。
另请参见最佳的Clojure单元测试框架是什么?(该问题的答案没有提供太多关于“为什么”的细节)。
你更喜欢哪一个,为什么?每个的优缺点是什么?在哪种情况下,每个都比其他测试框架更出色?
我特别关注midje vs. clojure.test,但也可以提及其他Clojure测试框架。
另请参见最佳的Clojure单元测试框架是什么?(该问题的答案没有提供太多关于“为什么”的细节)。
我更喜欢Midje。Midje提供了从clojure.test到更灵活、可读性更强、抽象度更高和更友好的测试风格的迁移路径。
Midje支持自上而下以及自下而上的TDD风格,并且内置了模拟和存根设施,以及一些强大的功能,如检查器(checkers)、元常量(metaconstants)、表格事实(tabular facts)等。
这是一个简单的例子:
(fact "Midje can do simple stubbing"
(+ (a) 2) => 5
(provided
(a) => 3))
虽然我没有尝试过所有的测试框架,但我喜欢最基本的clojure.test,理由如下:
示例代码:
(testing "Arithmetic"
(testing "with positive integers"
(is (= 4 (+ 2 2)))
(is (= 7 (+ 3 4))))
(testing "with negative integers"
(is (= -4 (+ -2 -2)))
(is (= -1 (+ 3 -4)))))
clojure.test
进行测试,这两个选项都能提供易于阅读的错误信息并具有相对较少的语法。
clojure.test
示例给定以下测试代码,下面是相应的输出内容。
(deftest map-comparisons
(is (= {:sheep 1} {:cheese 1 :sheep 1})))
FAIL in (map-comparisons) (map_test.clj:5)
expected: (= {:sheep 1} {:cheese 1, :sheep 1})
actual: (not (= {:sheep 1} {:cheese 1, :sheep 1}))
FAIL in (map-comparisons) (map_test.clj:5)
expected: {:sheep 1}
actual: {:cheese 1, :sheep 1}
diff: + {:cheese 1}
测试如下:
(expect {:sheep 1} {:sheep 1, :cheese 1})
failure in (map_expectations.clj:6) : example.map-expectations
(expect {:sheep 1} {:sheep 1, :cheese 1})
expected: {:sheep 1}
was: {:cheese 1, :sheep 1}
in expected, not actual: null
in actual, not expected: {:cheese 1}
我对四个主要的Clojure测试库的输出进行了更详细的比较,您可以在这里找到。