我正在尝试测试一个函数(foo/my-function-under-test
以下)如何处理异常。具体来说,该函数调用clj-http.client/get
来发送HTTP请求,如果主机不可用,我想让被测试的函数最多重试三次。如果经过三次重试后仍然无法连接到主机,我希望它抛出我的ServiceUnavailable
异常。
下面的代码不正确,但它应该表达我的意图。我知道retries-count
不是一个变量。我也知道我可以通过动态重新绑定让它表现得像一个变量。但有没有一种函数式的方法来做这件事而无需模拟变量?
(deftest retries
(let [retry-count 0]
(with-redefs [clj-http.client/get (fn [url & [req & r]]
retry-count++
(throw (UnknownHostException. "Some message")))]
(is (thrown? ServiceUnavailable (foo/my-function-under-test)))
(is (= 3 retry-count)))))