如何编译仅用于Rust crate集成测试的专属二进制文件?
解决方案
这里有两种成熟的实现方案,可以满足仅在测试场景下编译专属二进制的需求:
方案1:配置测试专属二进制(最推荐)
你可以直接在 Cargo.toml 中把你的辅助工具定义为禁用测试框架的集成测试目标,Cargo 只会在执行 cargo test 时编译这部分代码,正常执行 cargo build 时不会处理,完全匹配你要的类似 dev-dependencies 的效果:
- 把你的工具代码放到你之前尝试的
tests/bin/test_helper.rs路径下(路径可以自定义) - 在项目根目录的
Cargo.toml中添加如下配置:
[[test]] # 编译后生成的二进制名称 name = "test-helper" # 你的工具代码的路径 path = "tests/bin/test_helper.rs" # 禁用测试框架,让它作为普通二进制运行,而不是被当成测试用例执行 harness = false
后续执行 cargo test 时,这个二进制会自动被编译,生成的产物会放在 target/debug/deps/ 目录下,命名为 test-helper-<hash>,你也可以执行 cargo test --no-run 只编译不运行测试来拿到这个二进制文件。
方案2:用特性开关控制普通二进制编译
如果你还是想把二进制放在 src/bin/ 目录下,可以通过特性开关控制它仅在需要时编译:
- 在
Cargo.toml中添加如下配置:
[[bin]] name = "test-helper" path = "src/bin/test_helper.rs" required-features = ["test-helper"] [features] default = [] # 仅测试时开启的特性 test-helper = []
- 正常执行
cargo build不会编译这个二进制,需要编译时可以执行cargo test --features test-helper,如果想要每次执行cargo test自动带上这个特性,可以在项目的.cargo/config.toml中添加别名配置:
[alias] test = "test --features test-helper"
内容的提问来源于stack exchange,提问作者dimo414
相关产品推荐
相关产品推荐

