2 个不稳定版本

0.8.0 2024 年 8 月 24 日
0.1.0 2024 年 7 月 1 日

725测试 中排名 #725

Download history 176/week @ 2024-06-29 12/week @ 2024-07-06 20/week @ 2024-07-13 45/week @ 2024-07-20 62/week @ 2024-07-27 48/week @ 2024-08-03 62/week @ 2024-08-10 35/week @ 2024-08-17

216 每月下载量
2 个工具包中使用 (通过 ostd)

MPL-2.0 许可证

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,接口可能发生变化。

没有运行时依赖