3个不稳定版本
0.2.0-alpha | 2022年4月27日 |
---|---|
0.1.1-alpha | 2022年3月21日 |
0.1.0-alpha | 2022年3月18日 |
#117 in #测试框架
在 substance-framework 中使用
8KB
52 行
Substance Framework
Substance Framework是一个Rust和Cargo的[no_std]测试框架,即使对于自定义目标也能工作。它允许你为仅使用
Core
的项目(无需为目标构建sdt
)执行单元测试。该框架依赖于一些夜间功能,以提供一个可以为你处理大部分繁重工作的完整系统。
任何需要支持无std
的目标(最小化目标或自定义系统)的项目都可以使用此项目,以避免需要重新实现测试运行器,如不稳定书籍中所述。
特性
- 为单元测试提供可工作的
no_std
运行器 - 以友好的界面显示结果
- 处理真正的panic并终止所有测试
- 提供简单宏以应用于测试函数
- 提供一组替换默认断言的断言
子项目
- substance-macro(必需):为框架提供所有必需的宏工作,链接到,文档
- substance-runner (必选): 提供主要的测试运行器
简要介绍
#![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