繁体   English   中英

断言引发的clojure测试

[英]clojure test that assertion throws

我有一个函数定义为:

(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))

检查断言是否会引发错误需要什么?

由于嵌套两个而导致断言失败的原因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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM