我正在尝试为我的: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的前几行:)
发布于 2012-08-15 00:59:29
异常是类,所以只需导入它即可。
(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,您的代码应该可以很好地运行。
https://stackoverflow.com/questions/11957087
复制相似问题