#mocking #testing #macro #proc-macro

macro arg_ripper

一个进程宏,用于将函数中的局部变量作为参数提取出来

1 个不稳定版本

0.1.0 2023年6月17日

1887进程宏

MIT 许可证

14KB
88 代码行

arg_ripper 是一个宏,允许轻松实现依赖注入,用于在函数内部模拟内部变量。它包含一个名为 rip 的宏,该宏接收一个局部绑定列表(let 语句)作为参数,并生成一个具有这些参数的新函数,而不是局部绑定。

示例

#[rip(inner: i32)]
fn my_func() -> i32 {
    let inner = 42;
    inner
}

fn main() {
    assert_eq!(my_func(), 42);
    assert_eq!(ripped_my_func(69), 69);
}

使这个功能对单元测试有用的关键特性是能够更改你正在撕裂的参数的类型。注意示例中第 1 行的类型提示,在这种情况下,它与原始版本的 inner 相同,但不必相同。唯一的限制是新代码仍然需要编译,这使得以下情况成为可能

#[rip(answer: &str)]
fn print_answer() {
    let answer: i32 = 42;
    println!("{answer}");
}

fn main() {
    print_answer();
    ripped_print_answer("Fourty Two");
}

仓库 有更多深入示例,展示如何与 mockall 一起使用,如果您感兴趣的话。

依赖项

~270–720KB
~17K SLoC