#mocking #test

pseudo

为 Rust 设计的小型模拟库

5 个不稳定版本

使用旧的 Rust 2015

0.2.0 2018年8月26日
0.1.0 2018年2月4日
0.0.3 2017年4月2日
0.0.2 2017年3月25日
0.0.1 2017年3月24日

#424 in 测试

Download history 146/week @ 2024-03-13 124/week @ 2024-03-20 107/week @ 2024-03-27 130/week @ 2024-04-03 110/week @ 2024-04-10 130/week @ 2024-04-17 128/week @ 2024-04-24 131/week @ 2024-05-01 211/week @ 2024-05-08 174/week @ 2024-05-15 173/week @ 2024-05-22 167/week @ 2024-05-29 172/week @ 2024-06-05 213/week @ 2024-06-12 214/week @ 2024-06-19 175/week @ 2024-06-26

807 次每月下载
用于 4 crates

MIT 许可证

16KB
126

Pseudo

为 Rust 设计的小型模拟库。

Crates.io Version Docs Build Status

Pseudo 允许您模拟 Trait 实现,以便您可以跟踪函数调用参数并在测试时设置返回值或覆盖函数。

以下是一个快速示例

extern crate pseudo;

use pseudo::Mock;

trait Foo: Clone {
    fn expensive_fn(&self, x: i64, y: i64) -> i64;
}

#[derive(Clone)]
struct MockFoo {
    pub expensive_fn: Mock<(i64, i64), i64>,
}

impl Foo for MockFoo {
    fn expensive_fn(&self, x: i64, y: i64) -> i64 {
        self.expensive_fn.call((x + 10, y))
    }
}

fn double_expensive_fn<T: Foo>(foo: &T, x: i64, y: i64) -> i64 {
    foo.expensive_fn(x, y) * 2
}

#[test]
fn doubles_return_value() {
    let mock = MockFoo { expensive_fn: Mock::default() };

    mock.expensive_fn.return_value(1000);

    assert_eq!(double_expensive_fn(&mock, 1, 2), 2000);
}

#[test]
fn uses_correct_args() {
    let mock = MockFoo { expensive_fn: Mock::default() };

    assert!(!mock.expensive_fn.called());

    double_expensive_fn(&mock, 1, 2);

    assert_eq!(mock.expensive_fn.num_calls(), 1);
    assert!(mock.expensive_fn.called_with((11, 2)));
}

更多示例可在 示例目录 中找到。

无运行时依赖