如何检查在Clojure测试中抛出AssertionException?

时间:2012-08-14 16:49:48

标签: clojure

我正在尝试为:pre:post条件编写单元测试,我的第一个想法就是这样做:

(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:)

1 个答案:

答案 0 :(得分: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,您的代码应运行正常。