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

能否让cargo test自动构建依赖的cli crate后再执行测试?

问题描述

我有一个Cargo多工作区项目,结构如下:

cli/
server/
test/
Cargo.toml

父目录的Cargo.toml配置内容:

[workspace]
members = [
    "server",
    "cli",
    "tests",
]
resolver = "1"

其中tests工作区包含一系列依赖cli crate构建产物的集成测试。我希望直接执行cargo test就能运行所有测试,但目前执行时会报错:

test tests::should_output_help ... FAILED

failures:

---- tests::should_output_help stdout ----
Error: Cause: Cargo command not found: /Users/l3r8y/code/fakehub/target/debug/cli

但先执行cargo build再运行测试则一切正常。请问能否让cargo test先构建cli crate,再执行测试?

解决方案

当然可以实现,以下是几种实用方案:

方案1:给tests crate添加cli依赖

在tests/Cargo.toml中添加cli作为开发依赖:

[dev-dependencies]
cli = { path = "../cli" }

Cargo会自动识别依赖关系,在运行tests的测试前先构建cli crate——哪怕你只是声明依赖但没直接在测试代码里引用,Cargo也会保证构建顺序。

方案2:使用--all-targets参数执行测试

直接执行带参数的测试命令:

cargo test --all-targets

--all-targets会让Cargo构建工作区内所有类型的目标(包括二进制、库、测试套件等),自然会提前构建好cli的二进制文件,测试时就能找到对应的可执行路径了。

方案3:手动组合构建与测试命令

如果不想修改配置,也可以直接组合两条命令:

cargo build -p cli && cargo test

先单独构建cli crate,再运行所有测试,这种方式简单直接,但需要手动执行组合命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:03:14