4

我正在尝试为我的: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 :)

4

1 回答 1

4

例外是类,所以只需导入它。

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

找到(在哪个包中)AssertionException所在的位置并将其替换为a.package.which.contains上面的代码。

或者您可以使用全名,就像:import上面的条款一样,但是如果您有多个使用该类的地方,这可能会很乏味。

UPD。我犯了一个错误。没有这样的课,AssertionException. 有一个 class AssertionError,因为它位于java.lang包内,所以它是自动导入的。Clojure 前置/后置条件抛出它,所以只需使用AssertionError而不是AssertionException,您的代码应该可以正常运行。

于 2012-08-14T16:59:28.533 回答