3个不稳定版本

0.2.0 2022年4月17日
0.1.1 2022年4月15日
0.1.0 2022年4月15日

#36 in #mock

Download history 34/week @ 2024-04-07 97/week @ 2024-04-14 43/week @ 2024-04-21 3/week @ 2024-04-28 2/week @ 2024-05-05 42/week @ 2024-05-12 74/week @ 2024-05-19 29/week @ 2024-05-26 37/week @ 2024-06-02 45/week @ 2024-06-09 65/week @ 2024-06-16 49/week @ 2024-06-23 51/week @ 2024-06-30 2/week @ 2024-07-07 15/week @ 2024-07-14 61/week @ 2024-07-21

每月129次下载
moq中使用

MIT/Apache

17KB
363

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 License, Version 2.0MIT许可证,任选其一。
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交并包含在此软件包中的任何贡献,将按上述方式双许可,无需额外条款或条件。

依赖关系

~1.5MB
~35K SLoC