gpt4 book ai didi

unit-testing - 如何使用 `with-redefs` 始终从函数中抛出异常

转载 作者:行者123 更新时间:2023-12-04 04:45:57 26 4
gpt4 key购买 nike

我想对代码的异常处理部分进行单元测试。为此,我使用 with-redefs 重新绑定(bind)可以抛出异常的 API,以便在测试期间抛出异常。我的测试函数看起来像这样

(deftest exception-handling
(testing "Map exception to Ring-response map"
(with-redefs [clj-http/get
(constantly (throw (ex-info "unexpected error" {:cause "A terrible calamity"})))]
(is (= 500
(:status
(some-function-calling-http-get arg))))
)
)
)

运行 lein test 导致错误消息:

    ERROR in (exception-handling) (core.clj:4593)
Uncaught exception, not in assertion.
expected: nil
actual: clojure.lang.ExceptionInfo: unexpected error
at clojure.core$ex_info.invoke (core.clj:4593)

使用 (constantly (throw... in with-redefs 或只是断言异常被抛出 thrown? 也会导致同样的错误。

本质上,我正在寻找 constantly 的宏版本。

最佳答案

constantly 是函数,不是宏,所以 (constantly (throw ...)) 会立即抛出错误。

如果你想要一个每次调用都会抛出错误的函数,你需要这样的东西:

(with-redefs [clj-http/get (fn [& _] (throw (ex-info "unexpected error"
{:cause "A terrible calamity"})))]
...)

关于unit-testing - 如何使用 `with-redefs` 始终从函数中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33625888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com