【问题标题】:Unable to resolve symbol: thrown?无法解析符号:抛出?
【发布时间】:2012-06-29 05:44:03
【问题描述】:

在 clojure 中执行以下操作的正确方法是什么?

(ns todo.test.models.task
  (:use [clojure.test]))

(deftest main-test
  (is (thrown? Exception (throw Exception "stuff")))
  (is (not (thrown? Exception (+ 2 3))))
)

第一个测试用例运行良好,但整个 sn-p 返回“无法解析符号:抛出?”

【问题讨论】:

    标签: unit-testing clojure


    【解决方案1】:

    如果您想对多个语句执行此操作,请使用 doseq

    (testing "bla"
        (doseq [x [1 2 3 4]]
          (my-dangerous-func! x)))
    

    【讨论】:

      【解决方案2】:

      is 是一个在其主体中查找符号thrown? 并构建测试的宏。 thrown? 实际上不是一个您可以调用的函数。 如果抛出了一个没有被寻找的异常,is 的默认行为将无法通过测试,因此您可以删除 (not (thrown?从上面的例子中得到你正在寻找的结果。

      【讨论】:

        【解决方案3】:

        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 内正确构造异常。

        【讨论】:

          猜你喜欢
          • 2018-11-11
          • 1970-01-01
          • 1970-01-01
          • 2021-02-04
          • 2016-12-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多