#property-testing #properties #quickcheck #testing-tools #hypothesis #shrinking

monkey_test

类似于 QuickCheck、ScalaCheck 和类似库的基于属性的测试(PBT)工具,适用于 Rust 编程语言

11 个版本 (6 个重大变更)

0.7.3 2024年6月6日
0.7.1 2024年4月12日
0.6.0 2024年3月27日
0.2.0 2023年11月10日

#259 in 测试

MIT 许可证

645KB
3K SLoC

Monkey Test

monkey test logo

类似于 属性测试 (PBT) 工具 QuickCheckScalaCheck类似库,适用于 Rust 编程语言。

☝️ 注意!此库正在积极开发中。部分功能缺失,API 可能会发生变化。有关最近更改的详细信息,请参阅 更改日志

示例

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

    #[test]
    #[should_panic(expected = "Property failed!\nFailure: 15")]
    fn test_that_will_fail() {
        monkey_test()
            .with_generator(gen::u8::any())
            .assert_true(|x| x < 15);
    }
}

入门

Cargo.toml 中添加

[dev-dependencies]
monkey_test = "0"

然后尝试一些小示例,如上面所示。

文档和教程

Monkey Test 文档 (也可在 docs.rs 上找到) 展示了如何使用此库,并试图成为使用 Monkey Test 和一般属性测试的完整教程。更多使用示例可以在源文件 tests/basic_usage.rs 和其他 测试文件夹 中的文件中找到。

当前状态和缺失部分

目前,在 0.x.y 版本中,该库正在积极开发中。它目前缺少一些部分,主要是用于以下内容的内置生成器和 shrinkers:

  • 字符串。
  • 除了 Vec 之外的一些常用数据结构。
  • 递归数据结构。

其他已知限制

  • 目前,浮点数生成器并没有限制自身缩小到给定生成器范围内的值,但默认会缩小到零。例如,假设我们创建了一个生成器 monkey_test::gen::f64::ranged(10.0..100.0),相关的缩小器不仅会尝试给定范围内的候选值 10.0..100.0,还可以尝试其他值,如 -10.0,最终会尝试缩小到零。

有关最近更改的详细信息,请参阅 CHANGELOG

其他库

Rust 中有其他基于属性的测试的替代方案。Monkey Test 库主要出于主观原因存在,不喜欢其他库的 API 体验或宏和属性的过度使用。您的体验可能会有所不同。

最成熟和广泛采用的替代方案是 QuickcheckProptest。目前,如果您想有一个生产级别的 PBT 库,请选择这两个中的任何一个。如果有疑问,请选择 Proptest,因为它允许自定义生成器和缩小器。

其他一些替代方案包括 checkitodiceprop

许可证

Monkey test 使用 MIT 许可证

贡献

这个库需要用户的反馈来变得更好。请随意 打开一个问题打开一个拉取请求

Monkey Test 中的所有工作都按照 MIT 许可证的条款许可。通过提交贡献,您同意按照这些条款许可您的工作。

依赖关系

~1.3–2MB
~38K SLoC