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