#logging-tracing #logging #tracing #log #log-messages #env-logger

dev test-log

在运行测试之前,初始化日志和/或跟踪基础设施的 #[test] 属性的替代品

9个版本

0.2.16 2024年4月30日
0.2.15 2024年2月26日
0.2.14 2023年12月6日
0.2.13 2023年10月13日
0.0.0 2021年6月29日

#9 in 测试

Download history 123083/week @ 2024-05-03 145614/week @ 2024-05-10 156151/week @ 2024-05-17 166830/week @ 2024-05-24 182590/week @ 2024-05-31 173405/week @ 2024-06-07 162609/week @ 2024-06-14 172488/week @ 2024-06-21 162878/week @ 2024-06-28 172237/week @ 2024-07-05 177627/week @ 2024-07-12 187273/week @ 2024-07-19 193908/week @ 2024-07-26 188069/week @ 2024-08-02 225138/week @ 2024-08-09 190566/week @ 2024-08-16

836,230每月下载量
用于 462 个Crates (448直接)

Apache-2.0 OR MIT

13KB

pipeline crates.io Docs rustc

test-log

test-log 是一个库,负责为Rust测试自动初始化日志和/或跟踪。

在运行Rust测试时,通常需要轻松访问测试代码输出的详细日志消息。通常,这些日志消息可能来自 log 库或通过 tracing 基础设施发出。

在测试的上下文中,问题在于需要某种形式的初始化,才能使这些库的消息出现在标准输出流上。

例如,常用的 env_logger (它提供了基于 log 的日志配置的简单方法),需要在每个测试中进行初始化

let _ = env_logger::builder().is_test(true).try_init();

每个测试中。

类似地,基于 tracing 的解决方案需要注册一个订阅者,该订阅者将事件/跨度写入终端。

这个库以直观的方式处理每个测试的初始化。

用法

该库提供了一个自定义的 #[test] 属性,当用于运行特定测试时,会先初始化 log 和/或 tracing

示例

因此,使用方法非常简单,只需导入和使用该属性

use test_log::test;

#[test]
fn it_works() {
  info!("Checking whether it still works...");
  assert_eq!(2 + 2, 4);
  info!("Looks good!");
}

当然,也可以为所选的测试集初始化日志,只需使用自定义属性注释这些测试即可

#[test_log::test]
fn it_still_works() {
  // ...
}

您还可以将其包装在其他属性中。例如,假设您使用 #[tokio::test] 来运行异步测试

use test_log::test;

#[test(tokio::test)]
async fn it_still_works() {
  // ...
}

功能

该软件包包含两个与“后端”初始化相关的功能。

  • log(默认启用),控制 log 软件包的初始化。
  • trace(默认禁用),控制 tracing 软件包的初始化。

根据被测试的软件包(及其依赖项)所使用的后端,应启用相应的功能,以便在终端上显示测试输出的消息。

除此之外,color 功能(默认启用)控制是否默认使用颜色输出。

日志配置

当运行 cargo test 时,默认情况下框架会捕获输出,仅在测试失败时显示。可以使用 --nocapture 参数来覆盖此设置。例如:

$ cargo test -- --nocapture

此外,会尊重 RUST_LOG 环境变量,并可以使用它来影响要与之一起工作的日志级别(以及其他事项)。请参阅 env_logger 文档tracing-subscriber 文档,了解支持的语法和更多信息。

如果启用了 trace 功能,可以使用 RUST_LOG_SPAN_EVENTS 环境变量来配置跟踪订阅者,在跨度生命周期中的特定点记录合成事件。将变量设置为要看到的逗号分隔的事件列表。例如,RUST_LOG_SPAN_EVENTS=fullRUST_LOG_SPAN_EVENTS=new,close

有效的事件有 newenterexitcloseactivefull。请参阅 tracing_subscriber 文档 了解事件的详细含义。

MSRV 策略

此软件包遵循 Cargo 的 语义版本规则。至少,它使用最近的 Rust 稳定版减去五个小版本(“N - 5”)构建。例如,假设最新的 Rust 稳定版是 1.68,则该软件包保证可以与 1.63 及更高版本构建。

依赖项

~0.3–9MB
~70K SLoC