1 个不稳定版本

0.0.1 2020 年 3 月 5 日

#93#tracker


2 个包中使用(通过 racetrack

Apache-2.0

17KB
399

racetrack

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

Racetrack 允许跟踪对方法的直接和间接调用。它受到 Jest 的 fn()spyOn 的启发。该库包括处理断言的跟踪器以及允许将跟踪器自动注入到方法中的过程宏。

使用方法

预期使用过程宏。

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.5MB
~34K SLoC