You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跟随《Command-Line Rust》编写的Rust测试触发Panic失败求助

问题:《Command-Line Rust》中ls命令测试失败的原因?

我最近学习Ken Youens-Clark所著的《Command-Line Rust》,在第8页作者讲解Rust单元测试时给出如下测试示例代码:

use std::process::Command;

#[test]
fn runs() {
    let mut cmd = Command::new("ls");
    let res = cmd.output();
    assert!(res.is_ok());
}

按照作者要求运行cargo test应得到测试通过结果,但我运行时测试失败,报错信息如下:

assertion failed: res.is_ok()
thread 'runs' panicked at tests\cli.rs:7:5:

我将代码中let mut cmd = Command::new("ls");改为我的包名称后测试通过,想请教该测试失败的原因。


解答

测试失败的核心原因是你的操作系统环境中找不到ls命令:

  • ls是类Unix系统(Linux、macOS等)的默认目录列表命令,但Windows系统原生没有这个命令,对应的等效命令是dir。
  • 调用Command::new("ls")时,Rust会在系统环境变量PATH中查找名为ls的可执行文件,找不到就会返回错误,导致res.is_ok()为false,触发断言失败。

而改为自己的包名称后测试通过,是因为cargo test运行时,项目的二进制文件已经编译完成,测试环境能正确定位到它的路径,所以命令执行成功。

如果想在Windows环境下让原示例代码通过测试,可以把ls替换为dir,或者安装Git Bash、WSL等类Unix环境并将其路径加入系统PATH。


内容的提问来源于stack exchange,提问作者Barbatos_Best_Bot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:06:15