在clojure中执行以下操作的正确方法是什么?
(ns todo.test.models.task
(:use [clojure.test]))
(deftest main-test
(is (thrown? Exception (throw Exception "stuff")))
(is (not (thrown? Exception (+ 2 3))))
)
第一个testcase运行正常,但整个代码段返回“无法解析符号:抛出?”
答案 0 :(得分:24)
is
是一个宏,用于在其正文中查找符号thrown?
并构建测试。
thrown?
实际上并不是您可以调用的函数。 is
的默认行为如果抛出的异常未被查找,则测试失败,因此您只需删除来自上面示例的(not (thrown?
并获得您要查找的结果。
答案 1 :(得分:11)
thrown?
是一个必须在is
之后出现的特殊断言,所以你不能将它嵌套在其他表达式中,所以在is
宏的上下文中,第二个断言会不会理解抛出的符号?
你可以说:
(deftest main-test
(is (thrown? Exception (throw (Exception. "stuff"))))
(is (= 5 (+ 2 3))))
如果在(+ 2 3)中抛出异常,clojure.test将报告1:错误,0:失败并转储堆栈跟踪。
另请注意,您的(throw Exception "stuff")
不正确 - 您需要在throw中正确构造Exception。
答案 2 :(得分:0)
如果您想对许多语句使用doseq
,则可以使用它:
(testing "bla"
(doseq [x [1 2 3 4]]
(my-dangerous-func! x)))