如何使用#![no_std] 测试 crate?

How do I test crates with #![no_std]?

我正在为 Rust 中的编程语言实现编写运行时。我计划在此运行时中链接我生成的编译代码,因此为了保持二进制文件较小,我不想依赖 std

当我尝试 cargo test 我的运行时时,我收到错误消息说找不到 std::slice::AsSlice,我发现这是因为一些测试工具需要标准库代码。

我该如何测试这段代码?有没有办法有条件地包含 #![no_std] pragma,即在测试时仍然包含 std 库?我还尝试创建一个包含 std 库的单独测试箱,extern crate将运行时箱放入其中,运行 我在那里进行测试,但这引入了一系列全新的问题。

#[cfg(test)]
#[macro_use]
extern crate std;

#[macro_use] 部分是可选的。)

您可以cfg_attr有条件地设置no_std。

#![cfg_attr(not(test), no_std)]