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