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

Rust项目中tests目录无法被Cargo识别的问题解决方法

问题解决步骤

你的核心问题出在目录结构错误和crate类型不匹配,以下是具体修复方案:

1. 调整测试目录位置

Cargo默认将项目根目录下的tests/作为集成测试目录,而你把tests放在了src/内部,Cargo不会识别这个位置的测试文件。

把src/tests/整个目录移动到项目根目录,最终结构应该是:

.
├── Cargo.lock
├── Cargo.toml
├── src
│   ├── ll
│   │   ├── implementation.rs
│   │   ├── mod.rs
│   │   └── node.rs
│   ├── lib.rs   # 新增文件
│   └── main.rs
└── tests
    └── ll.rs

2. 配置lib crate以支持测试引用

你的项目目前是binary crate(包含main.rs),binary crate无法被其他crate(包括测试crate)引用。需要把核心数据结构代码导出为lib crate:

  • 在src/下新建lib.rs文件,内容如下:
pub mod ll;
  • 修改src/ll/mod.rs,确保子模块对外可见:
pub mod implementation;
pub mod node;
  • 确保src/ll/implementation.rs中的LList结构体及相关成员、方法是公开的(添加pub关键字):
pub struct LList {
    pub head: ..., // 测试需访问的成员也要加pub
}

impl LList {
    pub fn new(data: i32) -> Self {
        // 你的实现代码
    }
}

3. 修正测试文件的引用路径

修改tests/ll.rs中的代码,通过lib crate名称导入LList(对应Cargo.toml中name字段的值,连字符需替换为下划线):

use data_structures_in_rust::ll::implementation::LList;

#[test]
fn create_list() {
    let list = LList::new(1);
    assert_eq!(list.head.data, 1);
}

4. 运行测试

现在执行cargo test,Cargo会自动编译lib crate并运行tests/ll.rs中的测试用例,Rust Analyzer也能正确识别测试代码的类型。

补充:单元测试的写法

如果需要写和代码耦合更紧密的单元测试,可以直接在src/ll/implementation.rs中添加:

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn create_list() {
        let list = LList::new(1);
        assert_eq!(list.head.data, 1);
    }
}

这种单元测试不需要调整目录,运行cargo test也会自动执行。

内容的提问来源于stack exchange,提问作者Tâmer Cuba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:35:24