Не удалось разрешить символ: брошен?

Каков правильный способ сделать следующее в clojure?

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

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

Первый тестовый файл работает нормально, но весь фрагмент возвращает "Не удалось разрешить символ: брошен?"

Ответ 1

is - макрос, который ищет символ thrown? в своем теле и строит тесты. thrown? на самом деле не функция, которую вы можете вызвать. Поведение is по умолчанию не проходит тест, если выбрано исключение, которое не искалось, поэтому вы можете просто удалить (not (thrown? из приведенного выше примера и получить результат, который вы ищете.

Ответ 2

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") неверен - вам нужно правильно построить исключение внутри броска.

Ответ 3

Используйте doseq если вы хотите сделать это для многих утверждений:

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