gpt4 book ai didi

unit-testing - 使用 Midje 测试音色日志输出

转载 作者:行者123 更新时间:2023-12-01 09:15:37 28 4
gpt4 key购买 nike

我正在使用Timbre作为一个日志库,但我在使用 Midje 测试它时遇到问题。我有以下方法,我要做的就是断言 Will be print 已打印。

(defn init [level]
(timbre/merge-config! {:output-fn my-output-fn})
(timbre/set-level! level)
(timbre/info "Will be printed")
(timbre/debug "Won't be printed"))

通过将 (timbre/default-output-fn) 包裹在我自己的 my-output-fn 函数中,我可以断言只有 1 个打印了2条日志,正确的是:

(fact "print info but not debug"
(core/init :info) => nil
(provided
(core/my-output-fn anything) => irrelevant :times 1))

但是我想确保正在打印的消息是将被打印。我找不到任何方法可以做到这一点,你会怎么做?

我正在以下项目中做实验https://github.com/stephanebruckert/timbre-midje

最佳答案

可以使用 Midje 的 as-checker prerequisite 验证函数的输入.

当您打印进入 timbre/default-output-fndata(我通过您的output-fn发现这一点)时,您看到它具有以下结构:

{:hash_ #delay[{:status :pending, :val nil} 0x5ed805b1], :instant #inst "2016-10-14T17:07:16.779-00:00", :config {:level :info, ....

因此日志级别在数据中可用。使用 as-checker 可以按如下方式验证日志级别:

(fact "print info but not debug"
(core/init :info) => nil
(provided
(timbre/default-output-fn anything ; opts is first argument
(as-checker (fn [data]
(= (-> data :config :level) ; get log level
:info)))) ; validate that it is info
=> anything :times 1)
(provided
(timbre/default-output-fn anything
(as-checker (fn [data]
(= (-> data :config :level)
:debug))))
=> anything :times 0))

现在,您想要检查消息的内容。不仅仅是日志级别。

实际消息在传递给 default-output-fnoptsdata 中不可用。环顾一下 Timbre 代码,我发现它可以在一个私有(private)函数 vargs->margs 中使用,该函数采用 ?err,一个 msg-type > 和 vargsvargs 包含消息(在您的情况下,传入的内容是例如 :auto :p ["The message"])

通过 as-checker 方法,可以按如下方式验证消息:

(fact "print Will be printed, not Won't be printed"
(core/init :info) => nil
(provided
(#'timbre/vargs->margs anything anything ["Will be printed"]) => {} :times 1)
(provided
(#'timbre/vargs->margs anything anything ["Won't be printed"]) => {} :times 0) )

请注意,vargs->margs 必须返回一个映射,否则 Timbre 会在后面的函数中抛出异常。

这样就可以验证“将被打印”被打印一次,并且“不会被打印”永远不会被打印。

关于unit-testing - 使用 Midje 测试音色日志输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964425/

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