2 个不稳定版本
新 0.8.0 | 2024 年 8 月 24 日 |
---|---|
0.1.0 | 2024 年 7 月 1 日 |
725 在 测试 中排名 #725
216 每月下载量
在 2 个工具包中使用 (通过 ostd)
10KB
131 行
OSTD 的内核模式测试框架。
ostd-test
代表 OSTD 的内核模式测试框架。其目标是为任何 #![no_std]
原生金属工具包提供类似于 cargo test
的体验。
在 OSTD 中,所有在工具包源代码树中编写的测试将在 ostd
初始化后立即运行。因此,您可以使用框架提供的任何功能,包括堆分配器等。
无论如何,ostd-test 是一个独立的工具包,只需
- 一个自定义链接脚本部分
.ktest_array
, - 以及一个分配实现。
并且 OSTD 正好提供了这两者。因此,任何依赖 OSTD 的工具包都可以使用 ostd-test 而无需任何额外的依赖。
用法
要为任何工具包编写单元测试,建议创建一个新的测试模块,例如。
#[cfg(ktest)]
mod test {
use ostd::prelude::*;
#[ktest]
fn trivial_assertion() {
assert_eq!(0, 0);
}
#[ktest]
#[should_panic]
fn failing_assertion() {
assert_eq!(0, 1);
}
#[ktest]
#[should_panic(expected = "expected panic message")]
fn expect_panic() {
panic!("expected panic message");
}
}
使用 ostd-test 框架的任何工具包都应与 ostd 链接。
顺便说一句,#[ktest]
属性也起作用,但它会阻碍使用 cfgs 的测试控制,因为未标记为测试的普通属性将在所有测试运行中执行,无论传递给编译器的 cfgs 是什么。更重要的是,使用没有 cfgs 的 #[ktest]
会占用二进制空间,因为 .ktest_array
部分在正常构建中不会被显式删除。
Rust的cfg用于控制测试模块的编译。与ktest
框架合作,OSDK会将环境变量RUSTFLAGS
设置为传递cfgs到所有的rustc调用中。要运行测试,你只需在crate目录中使用命令cargo osdk test
即可。更多信息,请参阅OSDK文档。
我们支持与标准库相同的#[should_panic]
属性,但当前的实现相当慢。请谨慎使用。
目前尚未考虑Doctest,接口可能发生变化。