Clojure单元测试。如何测试函数是否抛出异常?

时间:2015-08-18 03:52:34

标签: unit-testing clojure

我看到有一种方法可以测试函数是否抛出C类异常。但是有没有办法测试函数是否抛出任何异常。或断言它不应该抛出异常?

1 个答案:

答案 0 :(得分:6)

对于不期望异常的测试,请正常编写测试。抛出的任何异常都将导致测试失败。

对于可能抛出任何异常的测试,请使用ExceptionThrowable(异常的超类)。

例如:

(deftest mytest 
  (is (thrown? Exception (/ 1 0))))

(/ 1 0)会抛出一个java.lang.ArithmeticException,但也会与它的父类java.lang.Exception匹配。

您还可以编写一个not-thrown?宏来与clojure.test中的thrown?宏相反。

作为旁注,您通常希望在进行单元测试时捕获更多特定错误,因为您的代码可能会抛出新的意外错误,但您的测试很快就会通过。