跨目录函数单元测试报错:Rust GCD测试遇unresolved import错误
解决Rust GCD函数单元测试的unresolved import错误
看起来你遇到的unresolved import问题核心是测试文件的位置和Rust模块系统的路径规则不匹配,导致测试代码找不到src里的GCD函数。下面给你两种实用的解决方案:
方案一:在源码文件内编写单元测试(推荐用于单元测试)
这种方式不需要额外移动文件,直接在src/chapter1/gcd.rs里添加测试模块即可,Rust会在执行cargo test时自动识别:
// src/chapter1/gcd.rs // 你的GCD函数实现 pub fn gcd(a: u64, b: u64) -> u64 { if b == 0 { a } else { gcd(b, a % b) } } // 测试模块,仅在测试编译时启用 #[cfg(test)] mod tests { // 导入当前模块的gcd函数 use super::*; #[test] fn test_gcd_basic() { assert_eq!(gcd(14, 21), 7); assert_eq!(gcd(25, 15), 5); } #[test] fn test_gcd_with_zero() { assert_eq!(gcd(100, 0), 100); assert_eq!(gcd(0, 100), 100); } }
运行测试的命令:
cargo test
方案二:将测试文件移到tests目录做集成测试
如果想把测试和源码分离,可以用Rust的集成测试机制,步骤如下:
- 创建测试目录结构(如果不存在):
mkdir -p tests/chapter1
把根目录
chapter1/gcd.rs移动到tests/chapter1/gcd.rs修改测试文件的导入路径(需要确保你的项目有库目标,若没有则先调整Cargo.toml):
// tests/chapter1/gcd.rs // 替换成你Cargo.toml里的name字段值,比如"programming_rust" use programming_rust::chapter1::gcd::gcd; #[test] fn test_gcd() { assert_eq!(gcd(14, 21), 7); assert_eq!(gcd(25, 15), 5); assert_eq!(gcd(0, 0), 0); // 根据你的实现调整测试用例 }
补充:如果项目是二进制类型(只有main.rs)
如果你的项目目前只有src/main.rs,需要先调整为库+二进制的结构,才能让集成测试正常导入:
- 在
Cargo.toml中添加库配置:
[lib] name = "programming_rust" # 和项目名一致即可 path = "src/lib.rs"
- 创建
src/lib.rs,导出chapter1模块:
// src/lib.rs pub mod chapter1;
- 创建
src/chapter1/mod.rs,导出gcd模块:
// src/chapter1/mod.rs pub mod gcd;
做完这些调整后,再运行cargo test就能正常执行集成测试了。
内容的提问来源于stack exchange,提问作者user51
相关产品推荐
相关产品推荐

