Тест clojure, который бросает утверждение
У меня есть функция, определенная как:
(defn strict-get
[m key]
{:pre [(is (contains? m key))]}
(get m key))
И тогда у меня есть тест для этого:
(is (thrown? java.lang.AssertionError (strict-get {} :abc)))
Однако этот тест не проходит:
;; FAIL in () (myfile.clj:189)
;; throws exception when key is not present
;; expected: (contains? m key)
;; actual: (not (contains? {} :abc))
Что нужно, чтобы проверить, что утверждение выдает ошибку?
1 ответ
Решение
Причина, по которой ваше утверждение не выполняется, потому что вы вкладываете два is
, Внутренний is
уже ловит исключение, поэтому внешний is
Тест не пройден, потому что ничего не выброшено.
(defn strict-get
[m key]
{:pre [(contains? m key)]} ;; <-- fix
(get m key))
(is (thrown? java.lang.AssertionError (strict-get {} nil)))
;; does not throw, but returns exception object for reasons idk
(deftest strict-get-test
(is (thrown? java.lang.AssertionError (strict-get {} nil))))
(strict-get-test) ;; passes