Rust Workspace:是否可以在 lib crate 中使用二进制 crate 进行集成测试?

Rust Workspace: Is it possible to use a binary crate for integrationstests in lib crate?

我有以下工作区结构:

[workspace]

members = [
    "skserver", # binary
    "skclient", # binary
    "skcommon", # lib
    "skintegrationtests" # lib
]

目的是为 client/server-functionality 的集成测试提供一个额外的库箱。 skintegrationtestsCargo.toml如下:

# for integration tests of own programs etc.
skcommon = {path = "../skcommon"}
skclient = {path = "../skclient"}
skserver = {path = "../skserver"}

skcommon可以引用,但是skclient不行(我没试过skserver)。这是 Rust 故意的吗?如果是这样,为什么? 我开始使用 skcommon 进行集成测试。我想避免与 skclientskserver 的循环依赖,所以我创建了 skintegrationtests.

如果你想 运行 来自 skintegrationtestsskclient 二进制 ,那么你正在寻找 RFC 3028 binary dependencies,尚未实施。目前还没有一个干净的方法来做到这一点,除了一个与 Cargo 分开的构建脚本,确保二进制文件被构建,然后 运行s 测试。

如果你想调用定义在skclient包代码中的函数,那么你需要修改skclient所以它是一个库包——有a lib.rs — 所有需要的函数都在那里定义,而不是 main.rs。这并不妨碍它 also 有一个二进制文件,它可以将库引用为 use skclient::whatever;.