11 个版本
0.2.8 | 2021 年 11 月 21 日 |
---|---|
0.2.7 | 2021 年 4 月 10 日 |
0.2.6 | 2021 年 3 月 23 日 |
0.2.3 | 2020 年 11 月 30 日 |
0.1.0 | 2019 年 4 月 28 日 |
#20 在 #env-logger
10,128 每月下载量
在少于 30 个 crate 中使用
14KB
108 代码行
test-env-log
test-env-log 是一个crate,负责为Rust测试自动初始化日志和/或跟踪。
当运行Rust测试时,有时需要方便地访问代码产生的详细日志消息。通常,这些日志消息可能来自 log
crate 或通过 tracing
基础设施发出。
在测试的上下文中,问题是需要某种形式的初始化,才能使这些crate的消息出现在标准输出流上。
例如,常用的 env_logger
(它提供了一种配置 log
基于日志的简单方法),需要像这样初始化
let _ = env_logger::builder().is_test(true).try_init();
在每个测试中。
类似地,基于 tracing
的解决方案需要注册一个订阅者,将事件/跨度写入控制台。
这个crate以直观的方式处理每个测试的初始化。
用法
该crate提供了一个自定义的 #[test]
属性,当用于运行特定测试时,会负责在之前初始化 log
和/或 tracing
。
示例
因此,使用方法非常简单,只需导入并使用该属性即可
use test_env_log::test;
#[test]
fn it_works() {
info!("Checking whether it still works...");
assert_eq!(2 + 2, 4);
info!("Looks good!");
}
当然,也可以初始化一组选定测试的日志,只需将这些测试用自定义属性注释即可
#[test_env_log::test]
fn it_still_works() {
// ...
}
还可以包装另一个属性。例如,假设您使用 #[tokio::test]
运行异步测试
use test_env_log::test;
#[test(tokio::test)]
async fn it_still_works() {
// ...
}
日志配置
当运行 cargo test
时,输出默认由框架捕获,仅在测试失败时显示。可以通过提供 --nocapture
参数来覆盖此设置。例如,
$ cargo test -- --nocapture
此外,RUST_LOG
环境变量被尊重,并可用于影响要与其一起工作的日志级别。请参阅 env_logger
文档 以获取更多信息。
如果启用了 trace
功能,可以使用 RUST_LOG_SPAN_EVENTS
环境变量来配置跟踪订阅者,在跨度生命周期中的点记录合成事件。将变量设置为要查看的事件的逗号分隔列表。例如,RUST_LOG_SPAN_EVENTS=full
或 RUST_LOG_SPAN_EVENTS=new,close
。
有效的事件是 new
、enter
、exit
、close
、active
和 full
。有关事件的详细信息,请参阅 tracing_subscriber
文档。
功能
该软件包包含两个功能
log
,默认启用,控制log
软件包的初始化。trace
,默认禁用,控制tracing
软件包的初始化。
根据受测试的软件包(及其依赖项)使用的后端,应启用相应的功能,以便在控制台上显示测试发出的消息。
请注意,作为用户,您需要明确地将 env_logger
或 tracing-subscriber
添加为项目依赖项的依赖项(在启用 log
或 trace
功能时)。例如,
[dev-dependencies]
env_logger = "*"
tracing = {version = "0.1", default-features = false}
tracing-subscriber = {version = "0.3", default-features = false, features = ["env-filter", "fmt"]}
依赖关系
~1.5MB
~35K SLoC