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 的集成测试提供一个额外的库箱。 skintegrationtests
的Cargo.toml
如下:
# for integration tests of own programs etc.
skcommon = {path = "../skcommon"}
skclient = {path = "../skclient"}
skserver = {path = "../skserver"}
skcommon
可以引用,但是skclient
不行(我没试过skserver
)。这是 Rust 故意的吗?如果是这样,为什么?
我开始使用 skcommon
进行集成测试。我想避免与 skclient
和 skserver
的循环依赖,所以我创建了 skintegrationtests
.
如果你想 运行 来自 skintegrationtests
的 skclient
二进制 ,那么你正在寻找 RFC 3028 binary dependencies,尚未实施。目前还没有一个干净的方法来做到这一点,除了一个与 Cargo 分开的构建脚本,确保二进制文件被构建,然后 运行s 测试。
如果你想调用定义在skclient
包代码中的函数,那么你需要修改skclient
所以它是一个库包——有a lib.rs
— 所有需要的函数都在那里定义,而不是 main.rs
。这并不妨碍它 also 有一个二进制文件,它可以将库引用为 use skclient::whatever;
.
我有以下工作区结构:
[workspace]
members = [
"skserver", # binary
"skclient", # binary
"skcommon", # lib
"skintegrationtests" # lib
]
目的是为 client/server-functionality 的集成测试提供一个额外的库箱。 skintegrationtests
的Cargo.toml
如下:
# for integration tests of own programs etc.
skcommon = {path = "../skcommon"}
skclient = {path = "../skclient"}
skserver = {path = "../skserver"}
skcommon
可以引用,但是skclient
不行(我没试过skserver
)。这是 Rust 故意的吗?如果是这样,为什么?
我开始使用 skcommon
进行集成测试。我想避免与 skclient
和 skserver
的循环依赖,所以我创建了 skintegrationtests
.
如果你想 运行 来自 skintegrationtests
的 skclient
二进制 ,那么你正在寻找 RFC 3028 binary dependencies,尚未实施。目前还没有一个干净的方法来做到这一点,除了一个与 Cargo 分开的构建脚本,确保二进制文件被构建,然后 运行s 测试。
如果你想调用定义在skclient
包代码中的函数,那么你需要修改skclient
所以它是一个库包——有a lib.rs
— 所有需要的函数都在那里定义,而不是 main.rs
。这并不妨碍它 also 有一个二进制文件,它可以将库引用为 use skclient::whatever;
.