2012-06-27 3 views
9

clojureで以下のことを行う適切な方法は何ですか?シンボルをスローすることができませんでしたか?

(ns todo.test.models.task 
    (:use [clojure.test])) 

(deftest main-test 
    (is (thrown? Exception (throw Exception "stuff"))) 
    (is (not (thrown? Exception (+ 2 3)))) 
) 

最初のテストケースはうまく動作しますが、スニペット全体が「シンボルをスローすることができませんか?

答えて

17

isは、シンボルthrown?をボディとビルドテストで検索するマクロです。 thrown?は実際にあなたが呼び出せる関数ではありません。isのデフォルトの動作では、例外がスローされた場合にテストが失敗するため、上記の例から(not (thrown?を削除して、探している結果を得ることができます。

9

thrown?は、あなたが他の式で巣にそれをすることはできませんので、isマクロの文脈では、第2のアサーションがスローされたシンボルを理解することはありませんので、is後に表示しなければならない特別な主張です?。

あなただけ言うことができる:エラーと0:

(deftest main-test 
    (is (thrown? Exception (throw (Exception. "stuff")))) 
    (is (= 5 (+ 2 3)))) 

を例外が(+ 2 3)でスローされた場合、clojure.testは1報告します失敗し、スタックトレースをダンプします。

また、(throw Exception "stuff")が間違っていることにも注意してください。スローの内側にExceptionを正しく構築する必要があります。

関連する問題