2 个不稳定版本
0.2.0-beta.1 | 2024年3月3日 |
---|---|
0.1.0 | 2022年12月9日 |
#82 in 测试
8,648 每月下载次数
用于 2 crates
165KB
3K SLoC
捕获跟踪范围和事件
此 crate 提供了一个 tracing Layer
,用于捕获跟踪范围和事件。捕获的范围和事件可以用于测试断言(例如,“是否发生了具有特定名称/目标/…的范围?它的字段是什么?范围是否已关闭?范围进入的次数?”等等)。
该 crate 支持对捕获数据的简单断言,以及基于 predicates
的更流畅的断言。
使用方法
将此添加到您的 Crate.toml
[dependencies]
tracing-capture = "0.2.0-beta.1"
捕获范围进行测试断言
use tracing::Level;
use tracing_subscriber::layer::SubscriberExt;
use tracing_capture::{CaptureLayer, SharedStorage};
let subscriber = tracing_subscriber::fmt()
.pretty()
.with_max_level(Level::INFO)
.finish();
// Add the capturing layer.
let storage = SharedStorage::default();
let subscriber = subscriber.with(CaptureLayer::new(&storage));
// Capture tracing information.
tracing::subscriber::with_default(subscriber, || {
tracing::info_span!("test", num = 42_i64).in_scope(|| {
tracing::warn!("I feel disturbance in the Force...");
});
});
// Inspect the only captured span.
let storage = storage.lock();
assert_eq!(storage.all_spans().len(), 1);
let span = storage.all_spans().next().unwrap();
assert_eq!(span["num"], 42_i64);
assert_eq!(span.stats().entered, 1);
assert!(span.stats().is_closed);
基于谓词的断言
use predicates::str::contains;
use tracing::Level;
use tracing_subscriber::{layer::SubscriberExt, Registry};
use tracing_capture::{predicates::*, CaptureLayer, SharedStorage};
let storage = SharedStorage::default();
let subscriber = Registry::default().with(CaptureLayer::new(&storage));
tracing::subscriber::with_default(subscriber, || {
tracing::info_span!("test_spans").in_scope(|| {
tracing::warn!(result = 42_i64, "computed");
});
});
let storage = storage.lock();
let predicate = level(Level::WARN)
& message(contains("compute"))
& field("result", 42_i64);
// Checks that there is a single event satisfying `predicate`.
storage.scan_events().single(&predicate);
// ...and that none of spans satisfy similar predicate.
storage.scan_spans().none(&level(Level::WARN));
替代方案/类似工具
tracing-test
是一个更低级的替代方案。tracing-fluent-assertions
在预期目标上更相似,但在 API 设计上存在显著差异;断言需要在捕获之前声明。
许可证
根据您的选择,在 Apache 许可证,版本 2.0 或 MIT 许可证 下获得许可。
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交给tracing-toolbox
的任何贡献,应如上所述进行双重授权,不附加任何其他条款或条件。
依赖项
~1.8–2.5MB
~48K SLoC