#test-framework #framework #unit-testing #substance #test

nightly no-std substance-framework

一个无需 std 就能工作的测试框架,仅使用核心特性

4 个版本 (2 个破坏性更新)

0.3.0-alpha2022年4月27日
0.2.1-alpha2022年4月16日
0.2.0-alpha 2022年4月16日
0.1.1-alpha2022年3月21日
0.1.0-alpha2022年3月18日

#467测试

MIT 许可证

51KB
811

Substance Framework

Substance Framework 是一个针对 Rust 和 cargo 的 [no_std] 测试框架,即使对于自定义目标也能正常工作。它允许你在仅使用 Core 的项目中执行单元测试(无需为目标构建 sdt)。该框架依赖于一些 nightly 特性,以提供一套完整系统,为你处理大部分繁琐工作。

任何需要无 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实现直接)

  • 获取UI升级 => 使用libc包访问STDOUT

  • 支持JUnit-like XML报告生成 => 基本系统

  • 提供Setup()和TearDown()

  • 实现完整的XUnit系统

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

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

  • 等等。

依赖项

~1.5MB
~38K SLoC