我正在尝试为我的: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
,您的代码应该可以正常运行。