31 个版本

0.13.0 2024 年 7 月 21 日
0.12.1 2023 年 12 月 21 日
0.11.4 2023 年 3 月 26 日
0.11.3 2022 年 10 月 18 日
0.1.1 2019 年 7 月 3 日

#8 in 测试

Download history 454607/week @ 2024-05-03 476013/week @ 2024-05-10 492117/week @ 2024-05-17 484008/week @ 2024-05-24 543034/week @ 2024-05-31 528382/week @ 2024-06-07 498472/week @ 2024-06-14 523014/week @ 2024-06-21 501129/week @ 2024-06-28 482141/week @ 2024-07-05 529899/week @ 2024-07-12 544755/week @ 2024-07-19 554450/week @ 2024-07-26 533557/week @ 2024-08-02 593217/week @ 2024-08-09 592143/week @ 2024-08-16

2,384,556 每月下载量
用于 847 个 crate (453 直接)

MIT/Apache

82KB
876

Mockall

Rust 的强大模拟对象库。

Build Status Crates.io Documentation

概述

模拟对象是软件单元测试的强大技术。模拟对象是一个具有与真实对象相同接口的对象,但其响应全部由测试代码手动控制。它们可以用于测试应用程序的上层和中间层,而不需要实例化底层,或者注入使用完整堆栈时难以或无法创建的边缘和错误情况。

静态类型语言通常比动态类型语言更难模拟。由于 Rust 是一种静态类型语言,因此创建模拟对象库的先前尝试结果不一。Mockall 结合了先前设计的最佳元素,因此它具有丰富的功能集和简洁、易用的接口。Mockall 使用 100% 安全稳定 的 Rust 编写。

使用方法

通常 mockall 只在单元测试中使用。要这样使用,请将以下内容添加到您的 Cargo.toml

[dev-dependencies]
mockall = "0.13.0"

然后这样使用

#[cfg(test)]
use mockall::{automock, mock, predicate::*};
#[cfg_attr(test, automock)]
trait MyTrait {
    fn foo(&self, x: u32) -> u32;
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn mytest() {
        let mut mock = MockMyTrait::new();
        mock.expect_foo()
            .with(eq(4))
            .times(1)
            .returning(|x| x + 1);
        assert_eq!(5, mock.foo(4));
    }
}

有关更多信息,请参阅 API 文档

最低支持的 Rust 版本 (MSRV)

Mockall 支持 Rust 1.71.0 及更高版本。在不提升主版本或次版本的情况下,Mockall 的 MSRV 不会在未来更改。

许可证

mockall 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。

有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT

致谢

Mockall 不是一天之内建成的。JMock 可能是第一个流行的模拟对象库。已经进行了许多移植和模仿,包括 C++ 的 GoogleMock。受 GoogleMock 启发的 Mockers 是第一个将此概念引入 Rust 的尝试。现已停用的 Mock_derive 是第一个使用过程宏生成模拟对象库,大大减少了用户的工作量。Mockall 也使用过程宏,并借鉴了许多 Mockers 的功能和约定。Mockall 还从 Simulacrum 的内部设计以及其模拟泛型方法的技术中汲取灵感。

依赖关系

~0.5–1MB
~22K SLoC