如何检查 AssertionException 是否在 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:)

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

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

找到AssertionException所在的位置(在哪个包中)并替换它,而不是在上面的代码中a.package.which.contains

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

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

最新更新