#logging #log4rs #log #parallel-testing #integration-tests #unit-testing

log4rs测试工具

为基于log4rs的日志测试提供工具,无论是要记录测试还是测试日志

5 个版本

0.2.3 2022 年 10 月 7 日
0.2.2 2022 年 10 月 5 日
0.2.1 2022 年 10 月 4 日
0.2.0 2022 年 10 月 4 日
0.1.0 2022 年 10 月 2 日

#279测试

Download history 71/week @ 2024-03-13 47/week @ 2024-03-20 17/week @ 2024-03-27 74/week @ 2024-04-03 40/week @ 2024-04-10 99/week @ 2024-04-17 140/week @ 2024-04-24 414/week @ 2024-05-01 178/week @ 2024-05-08 73/week @ 2024-05-15 187/week @ 2024-05-22 248/week @ 2024-05-29 222/week @ 2024-06-05 145/week @ 2024-06-12 85/week @ 2024-06-19 67/week @ 2024-06-26

每月 563 次下载
5 crates 中使用

MIT/Apache

19KB
206

log4rs 测试工具

本 crate 旨在解决测试与日志结合时经常出现的痛点。
根据您的使用情况分为两部分:您是想记录测试还是测试日志?
记录测试

如果您想记录测试,即设置记录器并捕获结果以调试单元测试和集成测试,请查看 test_logging

内容包括

  • TestConsoleAppender,一个确保日志确实被默认测试框架捕获而不是散布在您可爱的控制台上的后缀。
  • init_logging_once,确保您的记录只在一次中初始化,即使许多测试并行运行。
  • init_logging_once_for,做同样的事情,但自动为给定目标创建合理的配置。

示例用法

use log::{info, LevelFilter};
use log4rs_test_utils::test_logging::init_logging_once_for;

fn some_fn(x: u32) -> u32 {
    info!(target: "foo", "some_fn called with {x}");
    panic!("This test will fail, but we'll have the logs to debug it.");
    x + 1
}

#[test]
fn some_test() {
    init_logging_once_for(vec!["foo", "bar"], LevelFilter::Debug, None);

    let y = some_fn(5);
    assert_eq!(y, 6);
}

测试您的日志

如果您想测试日志,即编写对日志输出的断言的测试,请查看 log_testing

  • 内容包括
  • MockAppender,一个将所有日志保存到 Vec<String> 的后缀,以便程序化检查。
  • logging_test_setup,通过配置记录器和序列化所有记录测试来处理测试设置,以确保它们不会冲突。

示例用法

use log::{error, info};
use log4rs_test_utils::logging_test_setup_mock;

#[test]
fn simple_mock_example() {
    let (_guard, logs_handle) = logging_test_setup_mock(None, None);

    info!("Hello, world!");
    error!("Oh, no!");
    info!("Goodbye, world.");

    let logs = logs_handle.lock().unwrap();
    assert_eq!(logs.len(), 3);
    assert_eq!(logs.iter().filter(|s| s.contains("INFO")).count(), 2);
    assert_eq!(logs.iter().filter(|s| s.contains("ERROR")).count(), 1);
    assert_eq!(logs.iter().filter(|s| s.contains(", world")).count(), 2);
}

logging_test_setup_mock,做同样的事情,但自动为您创建一个 MockAppender,以节省更多精力。

许可协议

根据您的选择,受 Apache 许可证 2.0 版MIT 许可证 许可。

除非您明确表示,否则根据 Apache-2.0 许可证定义,您故意提交以包含在本 crate 中的任何贡献都应按上述方式双重许可,而不附加任何额外条款或条件。

依赖项
~55K SLoC