gpt4 book ai didi

testing - 为条件编译定义自定义属性的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 11:34:18 26 4
gpt4 key购买 nike

我希望能够在需要调试测试时将标志传递给cargo test以启用登录测试的功能。

我想出了类似的东西:

#[cfg(logging)]
// An internal module where I define some helper to configure logging
// I use `tracing` internally.
use crate::logging;

#[test]
fn mytest() {
#[cfg(logging)]
logging::enable();
// ..
assert!(true);
}

然后我可以启用日志
RUSTFLAGS="--cfg logging" cargo test

它可以工作,但是感觉像我在滥用 rustc标志系统。它还具有用 logging标志重新编译所有 crate 的副作用,如果我的某个依赖者有朝一日使用了此标志,则可能会出现问题(除了需要花一些时间)。

有没有更好的方法来定义和使用自定义属性?我可以在 cargo list 中添加 feature,但这并不是一个真正的功能,因为它仅用于测试。

最佳答案

您通常不需要重新编译应用程序,不需要:您可以使用环境变量。例如:

if std::env::var("MY_LOG").is_ok() {
logging::enable();
}

然后,您可以通过调用您的应用程序来动态决定登录
MY_LOG=true cargo run

或者,如果已经编译,
MY_LOG=true myapp

通常,您配置的不仅仅是日志是否已打开,例如日志级别或级别目标。这是一个真实的示例: https://github.com/Canop/broot/blob/master/src/main.rs#L20

关于testing - 为条件编译定义自定义属性的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60881384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com