在cfg!(test)块中使用dev-dependencies依赖仍提示未声明crate或模块
问题解决:cargo test 提示
tempdir未声明 核心错误原因
你的Cargo.toml存在语法错误:tempdir = "0.3.7 缺少闭合的双引号,导致Cargo无法正确解析这个开发依赖,编译测试代码时自然找不到tempdir crate。
修复步骤
修正Cargo.toml的语法错误
给版本号补上闭合双引号:#... [dev-dependencies] tempdir = "0.3.7"处理代码中的作用域陷阱
就算依赖问题解决了,你的代码还有潜在问题:tmp是if块内的局部变量,当代码离开if块时,tmp会被自动销毁,对应的临时目录也会被删除,此时你返回的path指向的是一个已被删除的目录,后续使用会触发IO错误。调整代码延长临时目录的生命周期,比如将
tmp和path绑定在一起:use tempdir::TempDir; // 用元组持有tmp,避免提前销毁 let (path, _tmp_guard) = if cfg!(test) { let tmp = TempDir::new("cargo_test").expect("failed to create tempdir"); let test_path = tmp.path().to_str() .expect("临时目录路径无效") .to_string(); (test_path, Some(tmp)) } else { (path, None) }; // 后续正常使用path即可,_tmp_guard会在path不再使用时才被销毁(可选)显式导入crate
虽然Rust 2018及以后支持直接使用crate名,但显式导入能让代码更清晰,在测试模块顶部添加:use tempdir::TempDir;
内容的提问来源于stack exchange,提问作者Jitterbug
相关产品推荐
相关产品推荐

