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