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

跨目录函数单元测试报错: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的集成测试机制,步骤如下:

  1. 创建测试目录结构(如果不存在):
mkdir -p tests/chapter1
  1. 把根目录chapter1/gcd.rs移动到tests/chapter1/gcd.rs

  2. 修改测试文件的导入路径(需要确保你的项目有库目标,若没有则先调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:19:38