Jul*_*usz 14 unit-testing clojure
在clojure中执行以下操作的正确方法是什么?
(ns todo.test.models.task
(:use [clojure.test]))
(deftest main-test
(is (thrown? Exception (throw Exception "stuff")))
(is (not (thrown? Exception (+ 2 3))))
)
Run Code Online (Sandbox Code Playgroud)
第一个测试用例运行正常,但整个片段返回"无法解析符号:抛出?"
Art*_*ldt 24
is是一个宏,thrown?在其正文中查找符号并构建测试.
thrown?实际上并不是你可以打电话的功能.is如果抛出的异常没有被查找,则默认行为会导致测试失败,因此您可以(not (thrown?从上面的示例中删除它并获得您要查找的结果.
Ale*_*ler 12
thrown?是一个必须在之后出现的特殊断言is,所以你不能将它嵌套在其他表达式中,所以在is宏的上下文中,第二个断言将无法理解抛出的符号?
你可以这样说:
(deftest main-test
(is (thrown? Exception (throw (Exception. "stuff"))))
(is (= 5 (+ 2 3))))
Run Code Online (Sandbox Code Playgroud)
如果在(+ 2 3)中抛出异常,则clojure.test将报告1:错误,0:失败并转储堆栈跟踪.
还要注意你(throw Exception "stuff")的错误 - 你需要在throw中正确构造Exception.