是否可以使用 Rust 的日志信息进行测试?

Gat*_*ito 19 rust

我有一些使用info!Rust 日志箱的测试。我试过:

RUST_LOG=all cargo test -- --nocapture my_tests
Run Code Online (Sandbox Code Playgroud)

但日志根本不会出来。

但我没有初始化记录器,因为 puttinenv_logger::init();不起作用:

failed to resolve: use of undeclared crate or module `env_logger`
Run Code Online (Sandbox Code Playgroud)

Inl*_*ine 30

您可以尝试使用多种解决方法之一。

首先是在编译板条箱进行测试时使用,println如下所示。

#[cfg(not(test))] 
use log::{info, warn}; // Use log crate when building application
 
#[cfg(test)]
use std::{println as info, println as warn}; // Workaround to use prinltn! for logs.
Run Code Online (Sandbox Code Playgroud)

为了防止cargo静默测试标准输出,请运行这样的测试

$ cargo test -- --nocapture
Run Code Online (Sandbox Code Playgroud)

另一个优雅的解决方法是使用test-log crate

#[test_log::test] // Automatically wraps test to initialize logging
fn hello_log_tests() {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

要使用依赖项(例如env_logger错误消息中提到的)进行测试,请将其包含在dev-dependencies部分中

[dev-dependencies]
env_logger = "*"
Run Code Online (Sandbox Code Playgroud)