31次发布

使用旧Rust 2015

0.1.12 2017年10月7日
0.1.11 2017年3月22日
0.1.10 2016年11月25日
0.1.6 2016年7月7日
0.0.3 2014年11月19日

218测试 中排名

Download history 13/week @ 2023-12-15 13/week @ 2023-12-22 3/week @ 2023-12-29 8/week @ 2024-01-05 15/week @ 2024-01-12 6/week @ 2024-01-19 2/week @ 2024-01-26 3/week @ 2024-02-02 14/week @ 2024-02-09 21/week @ 2024-02-16 43/week @ 2024-02-23 49/week @ 2024-03-01 68/week @ 2024-03-08 109/week @ 2024-03-15 27/week @ 2024-03-22 477/week @ 2024-03-29

687 每月下载量
少于 7 crates 中使用

MIT 许可证

34KB
404

Stainless 构建状态

Stainless是一个轻量级、灵活、无偏见的测试框架。

请注意,Stainless目前需要Rust编译器的夜间版!

安装

在您的 Cargo.toml 文件中将stainless添加为依赖项

[dev-dependencies]
stainless = "*"

将以下行添加到您的 根模块 的顶部。该文件通常称为 src/main.rs(用于可执行文件)和 src/lib.rs(用于库)

#![feature(plugin)]
#![cfg_attr(test, plugin(stainless))]

这将在您使用 cargo test 运行测试时使不锈钢可用。当只使用库时,请确保使用 cargo test --lib 运行测试。

概述

Stainless 导出 describe! 语法扩展,允许您快速生成复杂的测试层次结构,并通过 before_eachafter_each 减少样板代码。

Stainless 目前支持以下类型的子块

  • before_eachafter_each
  • itfailingignore
  • bench
  • 嵌套 describe!

before_eachafter_each 允许您将一组测试的常见初始化和清理操作组合到一个单独的块中,从而缩短您的测试。

it 生成使用 before_eachafter_each 的测试。 failing 做同样的事情,但生成的测试被标记为 #[should_panic]。它可选地接受一个参数,该参数与失败消息匹配。 ignore 等同于用 #[ignore] 标记测试,默认情况下禁用测试。

bench 允许您以相同的方式生成基准测试,尽管 before_eachafter_each 块目前不会影响 bench

嵌套 describe! 块允许您更好地将测试组织成小单元,并为您提供对 before_eachafter_each 应用于何处进行细粒度控制。当然,包装 describe! 块的 before_eachafter_each 块也会被执行。

这4种子块一起,比内置测试基础设施提供了更多的灵活性和控制。

示例

describe! stainless {
    before_each {
        // Start up a test.
        let mut stainless = true;
    }

    it "makes organizing tests easy" {
        // Do the test.
        assert!(stainless);
    }

    after_each {
        // End the test.
        stainless = false;
    }

    bench "something simple" (bencher) {
        bencher.iter(|| 2 * 2)
    }

    describe! nesting {

        before_each {
          let mut inner_stainless = true;
        }

        after_each {
          inner_stainless = false;
        }

        it "makes it simple to categorize tests" {
            // It even generates submodules!
            assert_eq!(2, 2);
        }
    }
}

展开到(大致)

mod stainless {
    #[test]
    fn makes_organizing_tests_easy() {
        let mut stainless = true;
        assert!(stainless);
        stainless = false;
    }

    #[bench]
    fn something_simple(bencher: &mut test::Bencher) {
        bencher.iter(|| 2 * 2)
    }

    mod nesting {
        #[test]
        fn makes_it_simple_to_categorize_tests() {
            let mut stainless = true;
            let mut inner_stainless = true;
            assert_eq!(2, 2);
            inner_stainless = false;
            stainless = false;
        }
    }
}

导入模块

在此阶段,无法在 describe! 块内放置 use 语句。为了允许使用来自其他模块和crate的数据结构,每个 describe! 块都有一个无声的 pub use super::*;。这样,您在包含的模块中 pub use 的所有内容都在您的测试中可用。

#[cfg(test)]
mod tests {
    pub use std::collections::HashMap;

    describe! stainless {
        it "can use HashMap" {
            let map = HashMap::new();
        }
    }
}

许可证

MIT。有关详细信息,请参阅 LICENSE 文件。

作者

请参阅 Cargo.toml 以获取作者完整列表。

没有运行时依赖项