4 个版本
0.1.5 | 2023 年 3 月 22 日 |
---|---|
0.1.4 | 2023 年 1 月 2 日 |
0.1.3 | 2022 年 9 月 13 日 |
1462 在 开发工具 中
每月下载量 25
12KB
52 行
hodoku
一组简单的宏,用于在测试中使用 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);