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

使用#[rstest]时cargo build失败,如何正确组织代码?

解决rstest在cargo build时找不到依赖的问题

出现这个问题的核心原因是:你把测试相关代码(use rstest::rstest和#[rstest]标注的测试函数)放到了主程序代码中,而rstest默认是作为dev依赖添加的——cargo build编译主程序时不会引入dev依赖,自然找不到rstest;但cargo test会自动包含dev依赖,所以测试能正常运行。

下面是两种解决方案,优先推荐第一种:

方案一:将测试代码分离到专属测试模块(推荐)

把所有测试逻辑放到带有#[cfg(test)]标记的模块中,这样只有执行cargo test时才会编译这段代码,cargo build会直接忽略它。

示例代码(main.rs):

fn main() {
    // 你的主程序业务逻辑
    println!("Hello, world!");
}

// 测试模块,仅在测试模式下编译
#[cfg(test)]
mod tests {
    // 引入rstest宏
    use rstest::rstest;

    // 参数化测试示例
    #[rstest]
    #[case(2, 3, 5)]
    #[case(10, 20, 30)]
    fn test_add(#[case] a: i32, #[case] b: i32, #[case] expected: i32) {
        assert_eq!(a + b, expected);
    }
}

对应的Cargo.toml只需保留dev依赖:

[dev-dependencies]
rstest = "0.17.0" # 替换为最新版本号

方案二:将rstest设为普通依赖(不推荐)

如果你的主程序代码确实需要用到rstest的功能(这种场景极少,rstest本质是测试工具),可以把它添加到普通依赖中:

[dependencies]
rstest = "0.17.0"

这样cargo build和cargo test都能找到依赖,但会增加最终二进制包的体积,因此仅在必要时使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:45:38