#stack-trace #diagnostics #macro #try #operations #aid #during

macro no-std hodoku

测试期间辅助诊断的宏简单集合

4 个版本

0.1.5 2023 年 3 月 22 日
0.1.4 2023 年 1 月 2 日
0.1.3 2022 年 9 月 13 日

1462开发工具

每月下载量 25

MIT/Apache

12KB
52

hodoku

github crates.io docs.rs build status

一组简单的宏,用于在测试中使用 try 操作辅助测试。

该 crate 允许轻松编写函数和表达式,其中 ? 会自动转换为 .unwrap()

使用 ? 是语法上期望的。然而,在测试期间,这会导致问题,因为失败的测试缺少堆栈跟踪,这有助于您跟踪错误的精确行。

#[test]
fn test_case() -> Result<(), &'static str> {
    let value = function()?;
    assert_eq!(value, 42);
    Ok(())
}

默认情况下,当 function()? 出错时,您会得到以下内容

---- test_case stdout ----
Error: "bad"
thread 'test_case' panicked at 'assertion failed: `(left == right)`
  left: `1`,
 right: `0`: the test returned a termination value with a non-zero status code (1) which indicates a failure', <path>\library\test\src\lib.rs:185:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace


failures:
    test_case

注意,没有关于测试失败在哪一行的信息。

但是,通过包含 #[hodoku::function],您会得到以下内容

#[test]
#[hodoku::function]
fn test_case() -> Result<(), &'static str> {
    let value = function()?;
    assert_eq!(value, 42);
    Ok(())
}
---- test_case stdout ----
thread 'test_case' panicked at 'called `Result::unwrap()` on an `Err` value: "bad"', tests\failing.rs:8:27
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace


failures:
    test_case

这正是我们想使用 .unwrap() 而不是 try 操作符测试的原因。它指示了错误的精确行。


示例

使用 #[hodoku::function]

#[hodoku::function]
fn hello() {
    let value = Some(42)?;
    assert_eq!(value, 42);
}

hello();

解包表达式

let value = hodoku::expr!(Some(42)?);
assert_eq!(value, 42);

无运行时依赖