#框架 #测试框架 #substance #单元测试 #测试

no-std substance-macro

Substance Framework测试套件的宏crate

3个不稳定版本

0.2.0-alpha2022年4月27日
0.1.1-alpha2022年3月21日
0.1.0-alpha2022年3月18日

#117 in #测试框架


substance-framework 中使用

MIT 许可证

8KB
52

Substance Framework

Substance Framework是一个Rust和Cargo的[no_std]测试框架,即使对于自定义目标也能工作。它允许你为仅使用Core的项目(无需为目标构建sdt)执行单元测试。该框架依赖于一些夜间功能,以提供一个可以为你处理大部分繁重工作的完整系统。

任何需要支持无std的目标(最小化目标或自定义系统)的项目都可以使用此项目,以避免需要重新实现测试运行器,如不稳定书籍中所述。

此项目遵循

特性

  • 为单元测试提供可工作的no_std运行器
  • 以友好的界面显示结果
  • 处理真正的panic并终止所有测试
  • 提供简单宏以应用于测试函数
  • 提供一组替换默认断言的断言

子项目

简要介绍


#![feature(custom_test_frameworks)]
#![test_runner(substance_framework::test_runner)]

#[macro_use]
extern crate substance_framework;
#[macro_use]
extern crate substance_macro;

#[cfg(test)]
mod tests {
    #[substance_test]
    fn test_equals() {
        sf_assert_eq!(0, 0);
    }

    #[substance_test]
    fn test_non_equals() {
        sf_assert_ne!(0, -1);
    }

    #[substance_test]
    fn test_lower() {
        sf_assert_lt!(0, 1);
    }

    #[substance_test]
    fn test_lower_or_equals() {
        sf_assert_le!(0, 0);
    }

    #[substance_test]
    fn test_greater() {
        sf_assert_gt!(7, -1);
    }

    #[substance_test]
    fn test_greater_or_equals() {
        sf_assert_ge!(0, -1);
    }

    #[substance_test]
    fn test_is_true() {
        sf_assert!(53 != 54);
    }

    #[substance_test]
    fn test_failure() {
        sf_assert!(53 == 54);
    }

    #[substance_test]
    fn test_failure_with_msg() {
        sf_assert!(53 == 54, "I'm a bad little test");
    }

    #[substance_test("Should_panic")]
    fn test_should_fail() {
        sf_assert!(false);
    }

    #[substance_test("Ignore")]
    fn test_is_true_to_ignore() {
        sf_assert!(false, "shouldn't be visible");
    }

    #[substance_test("Should_panic")]
    fn test_panic() {
        panic!();
    }

    #[substance_test("Should_panic")]
    fn test_panic_with_message() {
        panic!("YEAAAAAA");
    }

    #[substance_test("Should_panic")]
    fn test_panic_with_arguments() {
        panic!("{}{}{}", "Y", "E", "AAAAAA");
    }

    #[substance_test("Should_panic", "Ignore")]
    fn test_panic_ignored() {
        panic!();
    }
}

最低支持的 Rust 版本

您必须使用至少 Rust nightly-2022-02-12,因为这个包依赖于一些不稳定的功能。这些功能是提供测试运行器和处理安全管理的 panic 处理程序所必需的。

路线图

  • 提供宏以简化此库的使用 => 第一个迭代

  • 提供断言的宏替换(默认直接使用 panic 实现)

  • 获得用户界面升级 => 使用 libc 包访问 STDOUT

  • 支持类似 JUnit 的 XML 报告生成 => 基本系统

  • 提供 Setup() 和 TearDown()

  • 实现完整的 XUnit 系统

  • 提供构建任何断言的全面声明性系统

  • 找到一种方法来优化运行时间(core 不提供线程支持)

  • 等等。

依赖关系

~1.5MB
~35K SLoC