无法解析符号:抛出?

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.