2012-08-14 56 views
4

我試圖寫一個單元測試,我:pre:post條件,我首先想到的是要做到這一點:如何檢查在Clojure測試中拋出AssertionException?

(ns myproj.battle-test 
    (:use clojure.test 
     myproj.battle)) 

(deftest lose-only-positive-amount-of-health 
    (let [actor {:health 100}] 
    (is (thrown? AssertionException 
      (:health (lose-health actor -5)))))) 

但我不能工作,如何從我的測試文件中引用AssertionException,和得到一個例外,而不是:

java.lang.IllegalArgumentException: Unable to resolve classname: AssertionException 

我已經試過各種事情(和谷歌一直沒有幫助的,大概是因爲這是太簡單的一個問題),但沒有任何的運氣,讓我怎麼檢查AssertionException是拋出?

我意識到這是一個非常初學者的問題;這些是我的Clojure的第幾行:)

回答

4

異常是類,所以只需導入它。

(ns myproj.battle-test 
    (:use clojure.test 
     myproj.battle) 
    (:import a.package.which.contains.AssertionException)) 
... 

定位到(其中包)AssertionException位於和在上面的代碼代替它,而不是a.package.which.contains

或者您可以使用全名,就像上面的:import子句一樣,但如果您有多個地方使用該類,則這可能很乏味。

UPD。我犯了一個錯誤。沒有這樣的課程,AssertionException。有一個類AssertionError,由於它位於java.lang包內,因此它會自動導入。 Clojure前/後條件拋出它,所以只需使用AssertionError而不是AssertionException,並且您的代碼應該運行良好。

+0

完美!我是一個白癡。非常感謝您指出應該顯而易見的事情 - 我正在尋找一個不存在的問題! – GraemeF 2012-08-14 18:37:51

+0

我很高興幫助) – 2012-08-14 20:37:15

相關問題