5 个版本 (3 个重大更新)

0.4.0 2022年4月17日
0.3.1 2022年4月15日
0.3.0 2022年4月15日
0.2.0 2022年4月11日
0.1.0 2022年4月7日

#654测试

Download history 97/week @ 2024-04-13 37/week @ 2024-04-20 3/week @ 2024-04-27 41/week @ 2024-05-11 67/week @ 2024-05-18 30/week @ 2024-05-25 36/week @ 2024-06-01 48/week @ 2024-06-08 56/week @ 2024-06-15 49/week @ 2024-06-22 37/week @ 2024-06-29 5/week @ 2024-07-06 13/week @ 2024-07-13 61/week @ 2024-07-20 44/week @ 2024-07-27

每月下载量:130

MIT/Apache

24KB
259

Moq

crates.io docs.rs build

此库提供宏,用于生成实现特质的模拟结构。

[dependencies]
moq = "0.4"

使用示例

#[moq::automock]
trait Trait {
    fn func(&self, arg: i64) -> String;
}

#[test]
fn test_ok() {
    let mock = TraitMock::new()
        .expect_func(|arg: i64| {
            assert_eq!(arg, 42);
            format!("Hello, {}", arg)
        })
        .expect_func(|arg: i64| {
            assert_eq!(arg, -1);
            format!("Hello again, {}", -1)
        });
    
    mock.func(42);
    mock.func(-1);
}

#[test]
fn test_failed_extra_call() {
    let mock = TraitMock::new()
        .expect_func(|arg: i64| {
            assert_eq!(arg, 42);
            format!("Hello, {}", arg)
        });

    mock.func(42);
    mock.func(-1); // Panic here
}

#[test]
fn test_failed_missing_call() {
    let mock = TraitMock::new()
        .expect_func(|arg: i64| {
            assert_eq!(arg, 42);
            format!("Hello, {}", arg)
        })
        .expect_func(|arg: i64| {
            assert_eq!(arg, -1);
            format!("Hello again, {}", -1)
        });

    mock.func(42);
    // Panic here
}

async_trait 也适用,但主要限制是在 async_trait 之上指定 automock 宏。

#[moq::automock]
#[async_trait::async_trait]
trait Trait {
    async fn func(&self, arg: i64) -> String;
}

#[tokio::test]
async fn test_ok() {
    let mock = TraitMock::new()
        .expect_func(|arg: i64| async {
            assert_eq!(arg, 42);
            format!("Hello, {}", arg)
        });
    
    mock.func(42).await;
}

您可以在 测试 中找到更多示例。

待办事项

  • 支持泛型函数
  • 支持静态函数
  • moq::mock!(..) 用于生成外部特质的模拟结构
  • 为没有特质的结构生成模拟结构
  • moq::lambda! 中捕获环境

许可证

许可协议为 Apache 许可协议,版本 2.0MIT 许可协议,您可选择其中之一。
除非您明确表示,否则根据 Apache-2.0 许可协议定义,您有意提交的任何贡献,均应双许可如上所述,不附加任何其他条款或条件。

依赖关系

~2MB
~44K SLoC