2012-06-27 64 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後顯示出來,所以你不能嵌套它在其他表達式,所以在is宏觀的背景下,第二個斷言不會明白的符號拋出?

你可以只說:

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

如果有異常的(2 + 3)拋出,clojure.test會報告1:錯誤和0:失敗並轉儲堆棧跟蹤。

另請注意,您的(throw Exception "stuff")不正確 - 您需要在throw內正確構造Exception。