rust 仅在运行测试时生成调试输出

m4pnthwp  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(105)

Rust/Cargo内置了很好的构建和测试功能,您可以区分如何使用cargo buildcargo build --releasecargo runcargo test构建和运行代码。
假设我有一个函数foo(),我想在单元测试中调用它。我想包含一些调试输出,这样如果测试失败,我会得到一些有用的输出。然而,我不希望输出显示如果我使用cargo build/cargo run进行调试构建,或者使用cargo build --release进行发布构建,则不会有任何运行时影响。我只希望在cargo test测试失败时显示此输出。
函数foo()对单元测试是不透明的,所以我不仅仅是在单元测试代码中输出print语句,我想检测函数foo()本身。例如,在C中,你可以用编译器#ifdef s来做这件事,并多次构建程序进行单元测试与调试与发布。我希望有一些更简单的东西,就像一个自动的testprint!()宏,它的工作方式就像print!()正常工作一样。
有什么办法吗?

gg58donl

gg58donl1#

使用cfg(test)

if cfg!(test) { print!(...); }

您可以使用macro_rules!创建自己的宏:https://doc.rust-lang.org/rust-by-example/macros.html,https://doc.rust-lang.org/book/ch19-06-macros.html#declarative-macros-with-macro_rules-for-general-metaprogramming,https://doc.rust-lang.org/reference/macros-by-example.html

相关问题