2016-10-09 34 views
4

在clojure.test中有一個宏允許同時測試幾個燈具:areclojure.test /與clojure.test/testing

在clojure.test中,是否可以將are宏與testing結合?

即,是這樣的:

(are [scenario expected input] 
    (testing scenario 
    (= expected (my-fn input))) 
    "scenario 1 - replaces -out by -in" "abc-out" "abc-in") 

回答

1

這是不可能的,在clojure.test are ..

我調整斯圖爾特Sierra的are支持testing的場景和失敗的消息如下:

(defmacro my-are 
    [scenario fail-msg argv expr & args] 
    (if (or 
     (and (empty? argv) (empty? args)) 
     (and (pos? (count argv)) 
      (pos? (count args)) 
      (zero? (mod (count args) (count argv))))) 
    `(testing ~scenario 
     (clojure.template/do-template ~argv (is ~expr ~fail-msg) [email protected])) 
    (throw (IllegalArgumentException. "The number of args doesn't match are's argv.")))) 

現在測試被包裝在一個testing場景中,並添加失敗消息。

此宏可用於這樣的:

(deftest my-test 
    (my-are "Scenario 1: testing arithmetic" "Testing my stuff failed" 
      [x y] (= x y) 
      2 (- 4 1) 
      4 (* 2 2) 
      5 (/ 10 2))) 

這導致:

測試總結

測試1名的命名空間
冉3個斷言,在1個測試功能
1失敗


結果
1未通過測試:

失敗在我的測試
方案1:測試算術
測試我的東西失敗
預期:(= 2( - 4 1))
實際:(不是(= 2 3))

您可以看到執行了三個斷言,失敗消息(「測試我的東西失敗)」顯示爲失敗的測試,並且場景消息(「場景1:測試算術「)是可見的。