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

Rust Workspace:是否可将二进制crate引入集成测试lib crate使用?

问题结论

这是Rust的有意设计,你无法直接引用skclient、skserver这类二进制crate的代码属于正常行为。

背后的设计原因
  • Rust对二进制crate和库crate有明确的定位区分:二进制crate的编译产物是最终可执行文件,编译过程不会生成可供外部crate链接调用的rlib库文件,因此其他crate在依赖时找不到对应的符号和编译产物,自然无法引用。而skcommon是库crate,编译时会生成对应的库文件供外部调用,所以可以正常引用。
  • 避免架构设计混乱:二进制crate本身的定位就是作为最终执行入口,不应该作为公共依赖被其他crate引用。如果二进制crate内有需要被外部调用的逻辑,说明这部分逻辑属于公共能力,应该抽离为独立的库crate,这种设计可以倒逼开发者做更合理的模块拆分。
可行的解决方案

如果你需要在skintegrationtests中调用客户端、服务端的逻辑做白盒集成测试,可以按以下方式调整:

  1. 将skclient、skserver中需要对外暴露的核心逻辑抽离为独立的库crate,比如skclient_core、skserver_core
  2. 原有的skclient、skserver二进制crate只保留main函数作为入口,依赖对应的*_core库crate
  3. skintegrationtests直接依赖skcommon、skclient_core、skserver_core即可正常调用相关逻辑

如果你只需要做黑盒集成测试,比如启动进程测试两者的网络交互,不需要依赖它们的crate代码,直接在测试代码中通过std::process::Command调用编译好的二进制文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:06:03