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

Rust测试中找不到get_skyline函数,如何引用被测试文件?

解决Rust测试中无法找到函数的问题

先确认正确的项目结构

你的项目需遵循标准Rust项目结构:

your_project/
├── src/
│   ├── lib.rs
│   └── skyline.rs
├── tests/
│   └── skyline.rs
└── Cargo.toml

步骤1:导出src/skyline.rs模块

在src/lib.rs中添加代码,将skyline模块公开,让测试代码能够访问:

pub mod skyline;

步骤2:在测试文件中引用目标函数

tests目录下的文件属于集成测试,需要通过你的库名(Cargo.toml中[package]下的name字段)来引用模块。假设你的库名为skyline_solver,修改tests/skyline.rs如下:

// 替换skyline_solver为你自己的库名
use skyline_solver::skyline::Solution;

#[test]
fn one_building() {
    let building1 = vec![1,2,2];
    let buildings = vec![building1];

    let expected_skyline = vec![vec![1,2], vec![2,0]];
    assert_eq!(Solution::get_skyline(buildings), expected_skyline);
}

可选:改用单元测试(更简单的方式)

如果不需要集成测试,直接在src/skyline.rs末尾添加测试模块即可,无需处理跨文件引用:

impl Solution {
    pub fn get_skyline(buildings: Vec<Vec<i32>>) -> Vec<Vec<i32>> {
        
    }
}

#[cfg(test)]
mod tests {
    // 引用父模块的所有内容
    use super::*;

    #[test]
    fn one_building() {
        let building1 = vec![1,2,2];
        let buildings = vec![building1];

        let expected_skyline = vec![vec![1,2], vec![2,0]];
        assert_eq!(Solution::get_skyline(buildings), expected_skyline);
    }
}

额外说明

如果你的项目是二进制项目(入口是src/main.rs),需要把业务代码移到src/lib.rs中,因为二进制项目的tests目录无法直接访问src/main.rs的代码,必须通过库模块导出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:04