csdn_huisy 2023-07-28 15:04 采纳率: 60%
浏览 10

我在用Rust写一个不依赖于std的crate,并设置target = "x86_64-unknown-uefi"。但是测试脚本(cargo test)需要依赖std,我该如何去配置?

我在用Rust写一个不依赖于std的crate,并设置target = "x86_64-unknown-uefi"。但是测试脚本(cargo test)需要依赖std,我该如何去配置?

.cargo/config代码如下:

[build]
target = "x86_64-unknown-uefi"

[unstable]
build-std = ["core", "alloc"]
build-std-features = ["compiler-builtins-mem"]

example.rs代码如下:

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

fn main() {

}

#[cfg(test)]
mod test {
    #[test]
    fn a() {
        println!("Hello, world!");
    }
}

现在需要执行cargo test命令以成功执行测试函数a

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-07-28 15:19
    关注

    先给测试构建一个单独的的目标,这个目标具有std功能。第一步就是:你在.cargo/config文件中添加下下面内容来为你的测试构建一个单独的目标:

    [target.'cfg(test)']
    rustflags = ["--cfg", "use_std"]
    

    第二步就是:构建完成后你可以使用#[cfg(test)]这个属性来区分一下你的测试和非测试的代码,并在测试代码中使用标准库功能,如下:

    #[cfg(test)]
    mod tests {
        #[test]
        fn test_something() {
            assert_eq!(2 + 2, 4);
            // 使用std特性
            std::println!("Hello, world!!");
        }
    }
    

    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月28日

悬赏问题

  • ¥50 C# 使用DEVMOD设置打印机首选项
  • ¥15 麒麟V10 arm安装gdal
  • ¥15 想用@vueuse 把项目动态改成深色主题,localStorge里面的vueuse-color-scheme一开始就给我改成了dark,不知道什么原因(相关搜索:背景颜色)
  • ¥20 OPENVPN连接问题
  • ¥15 flask实现搜索框访问数据库
  • ¥15 mrk3399刷完安卓11后投屏调试只能显示一个设备
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上