有时重构其中一个模块的更改会影响其他模块(或许多其他模块),因为更改了类型或更改了函数参数等等.在这种情况下,不要改变所有内容然后立即编译有没有办法我可以编译和运行单独的测试只有那个特定的模块,调整到心脏内容,当一切正确改变其他模块等运行完整/正常cargo build/test
?当然,其中一种方法可能是在相应的根模块中手动注释/取消注释模块列表,但是有没有其他方式直接来自说cargo test --someflag -only_this_module
或什么?
解释更多:
说我有以下几个模块:
a, b, c, d, e, f, g, h
其中,f
仅依靠g
和h
,但其余a, b, c, d, e
依赖f
(也许g
和h
但这不应该的问题).g
并且当然h
不依赖于上面的任何事情.因此,如果我进行更改,f
我只想编译f
并测试它而不更改所有这些.因为f
只依赖于我,g
并且h
我认为如果这些三件事情很好,那么我应该能够测试f
即使a, b ... e
被打破了,如果我做正常的话,箱子将无法编译cargo build/test
.这可能吗.
在 Rust 中,编译的基本单位是 crate,因此您无法编译 crate 的子集。如何克服:
\n// mod utils
)。编译并测试您正在修改的核心模块。一对一,取消注释下游模块,修复它,然后继续。todo!()
以满足编译器的要求,#[ignore]
测试失败,在附近编写新的实现,通过新的定义重新实现旧的定义,迁移其余的代码。mod utils2
. 实验结束后,迁移代码库。rust-script --test utils.rs --dep serde\n
Run Code Online (Sandbox Code Playgroud)\n支持 Cargo 中单文件包的 RFC 已合并并投入使用!\nRFC 实现后,您可以使用cargo <file>.rs
\xe2\x9c\xa8构建并运行 Rust 文件
您可以通过将某个模块作为参数提供给测试二进制文件来专门运行该模块的测试。如果您在之后指定,Cargo 会将参数传递给测试二进制文件--
,因此类似这样的操作应该有效:
cargo test -- module::you::want::to::test
Run Code Online (Sandbox Code Playgroud)
但是,您不能只编译crate 的一部分。Rust 中的板条箱是编译单元,就像.c
C 中的文件一样,你不能编译其中的一半而忽略另一半。