1 个不稳定版本
0.0.2 | 2020 年 3 月 5 日 |
---|---|
0.0.1 |
|
#816 在 测试
17KB
228 行
racetrack
一个用于编写方法、函数和闭包调用断言的库。
Racetrack 允许跟踪对方法的直接和间接调用。它受到了 Jest 的 fn()
和 spyOn
的启发。该库包括处理断言的追踪器,以及一个 proc-macro,允许将自动跟踪注入到方法中。
用法
建议使用 proc-macro。
use racetrack::{Tracker, track_with};
struct TrackedStruct(Arc<Tracker>);
#[track_with(0)]
impl TrackedStruct {
fn tracked_fn(&self, arg: String) {}
}
let tracker = Tracker::new();
let tracked = TrackedStruct(tracker.clone());
tracked.tracked_fn("Test".to_string());
tracker
.assert_that("TrackedStruct::tracked_fn")
.was_called_once()
.with(("Test".to_string()));
然而,这有一些限制。所有参数和返回类型都必须实现 ToOwned
,并且如果你有非常具体的要求,可能无法正常工作。因此,你可以选择手动使用追踪器
use racetrack::{Tracker, CallInfo};
struct TrackedStruct(Arc<Tracker>);
impl TrackedStruct {
fn tracked_fn(&self, arg: String) {
let call_info = CallInfo {
arguments: Some(Box::new(arg)),
returned: None
};
self.0.log_call("my_fn", call_info);
}
}
let tracker = Tracker::new();
let tracked = TrackedStruct(tracker.clone());
tracked.tracked_fn("Test".to_string());
tracker
.assert_that("my_fn")
.was_called_once()
.with("Test".to_string());
许可证:Apache-2.0
依赖
~1.7–2.3MB
~48K SLoC