2016-10-09 4 views
4

clojure.testには、複数のフィクスチャを同時にテストできるマクロがあります。areclojure.test/with clojure.test/testing

clojure.testではareマクロとtestingを組み合わせることはできますか?

e。以下のようなもの:

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

答えて

1

これはclojure.testでareでは不可能..です

次のように私はtestingのシナリオと失敗のメッセージをサポートするために、スチュアート・シエラのareを調整:

(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シナリオにラップされ、失敗メッセージが追加されます。

このマクロは次のように使用することができる:1つの名前空間
をテストした

テスト概要

1つの試験機能
1において、3つのアサーション蘭:

(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非通テスト:私のテストで

失敗
シナリオ1:(= 2(1 - 4))
実際:私のものをテストするテスト演算

は期待できませんでした(しません(= 2 3))

3つのアサーションが実行され、失敗したテストの失敗メッセージ(「テスト中に失敗」)が表示され、シナリオメッセージ(「シナリオ1:テスト算術」)が表示されます。