当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Julia Test.@test_logs用法及代码示例


用法:

@test_logs [log_patterns...] [keywords] expression

使用 collect_test_logs 收集 expression 生成的日志记录列表,检查它们是否匹配序列 log_patterns ,并返回 expression 的值。 keywords 提供一些简单的日志记录过滤:min_level 关键字控制为测试收集的最低日志级别,match_mode 关键字定义如何执行匹配(默认 :all 检查所有日志和模式成对匹配;使用 :any 检查模式是否在序列中的某个位置至少匹配一次。)

最有用的日志模式是 (level,message) 形式的简单元组。可以使用不同数量的元组元素来匹配其他日志元数据,对应于通过 handle_message 函数传递给 AbstractLogger 的参数:(level,message,module,group,id,file,line)。默认情况下,存在的元素将与使用 == 的日志记录字段成对匹配,在特殊情况下,Symbol 可用于标准日志级别,而模式中的 Regex 将匹配字符串或使用 occursin 的符号字段。

例子

考虑一个记录警告和一些调试消息的函数:

function foo(n)
    @info "Doing foo with n=$n"
    for i=1:n
        @debug "Iteration $i"
    end
    42
end

我们可以使用

@test_logs (:info,"Doing foo with n=2") foo(2)

如果我们还想测试调试消息,则需要使用 min_level 关键字启用这些消息:

@test_logs (:info,"Doing foo with n=2") (:debug,"Iteration 1") (:debug,"Iteration 2") min_level=Logging.Debug foo(2)

如果要测试是否生成了某些特定消息而忽略其余消息,可以设置关键字 match_mode=:any

@test_logs (:info,) (:debug,"Iteration 42") min_level=Logging.Debug match_mode=:any foo(100)

宏可以与 @test 链接以测试返回值:

@test (@test_logs (:info,"Doing foo with n=2") foo(2)) == 42

如果要测试是否没有警告,可以省略指定日志模式并相应地设置min_level

# test that the expression logs no messages when the logger level is warn:
@test_logs min_level=Logging.Warn @info("Some information") # passes
@test_logs min_level=Logging.Warn @warn("Some information") # fails

如果要测试 stderr 中是否存在不是由 @warn 生成的警告(或错误消息),请参阅 @test_nowarn

相关用法


注:本文由纯净天空筛选整理自julialang.org 大神的英文原创作品 Test.@test_logs — Macro。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。