在有多个 crate 的工作区里,怎样让一个 crate 的集成测试依赖并运行另一个 crate 的可执行目标,而不是它的库目标?
工作区结构如下。
workspace/
├── rillmere_probe/
│ └── tests/check.rs
└── rillmere_exec/
├── src/lib.rs
└── src/main.rs
rillmere_probe crate 把 rillmere_exec 列为 dev-dependency。它的测试还需要启动 rillmere_exec 的二进制文件。以前这样可以正常工作。但 rust-nightly 的 build-layout-v2 改变了文件布局,导致 assert_cmd-2.1.3 找不到 rillmere_exec 的可执行目标。assert_cmd-2.2.2 的诊断信息更明确,是 CARGO_BIN_EXE_rillmere_exec is unset。看到这个,我开始怀疑 assert_cmd 到底支不支持这种情况。应该不只我一个人遇到过吧。有人找到解决办法了吗?
从英语翻译·查看原文Within a multi-crate workspace, how can a crate's integration tests require and run another crate's exectuable target, rather than its library target?
Here's the workspace structure:
workspace/
├── rillmere_probe/
│ └── tests/check.rs
└── rillmere_exec/
├── src/lib.rs
└── src/main.rs
The rillmere_probe crate lists rillmere_exec as a dev-dependency. Its tests also need to launch rillmere_exec's binary. Previously this worked fine. However, the build-layout-v2 change in rust-nightly rearranged things, leaving assert_cmd-2.1.3 unable to locate rillmere_exec's executable target. The diagnostic from assert_cmd-2.2.2 is clearer: CARGO_BIN_EXE_rillmere_exec is unset. Reading that makes me wonder whether assert_cmd supports this situation at all. I can't imagine nobody else has run into it. Has anyone found a solution?