#proc-macro #tracking #async #test

racetrack

一个用于编写方法、函数和闭包调用断言的库

1 个不稳定版本

0.0.2 2020 年 3 月 5 日
0.0.1 2020 年 3 月 5 日

#816测试


被用于 artemis-normalized-cache

Apache-2.0 协议

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