gpt4 book ai didi

testing - 我如何在 QuickCheck 测试中悄悄捕捉 panic ?

转载 作者:行者123 更新时间:2023-11-29 07:50:55 26 4
gpt4 key购买 nike

在我的 overflower_support 测试中crate,我发现我收到了很多关于 panic 的虚假报告,这些报告已经使用 std::panic::catch_unwind(_) 进行了处理。这有点不幸,因为它掩盖了可能发生的真正错误。消息看起来像:

thread 'safe' panicked at 'arithmetic overflow', src/lib.rs:56

为了平息那些分散注意力的消息,我引入了 dont_panic(..) 函数,它劫持了 panic 处理程序,调用闭包并在完成时重置 panic 处理程序,返回闭包结果。它看起来像这样:

fn dont_panic<F, A, R>(args: A, f: F) -> R
where F: Fn(A) -> R
{
let p = panic::take_hook();
panic::set_hook(Box::new(|_| ()));
let result = f(args);
panic::set_hook(p);
result
}

然而,在函数中使用这个函数来检查有点令人惊讶,不仅可以平息所需的消息,而且还可以快速检查错误输出,这对我来说显然很有值(value)。即使将测试限制在一个线程中,也会发生这种情况。

#[test]
fn test_some_panic() {
fn check(x: usize) -> bool {
let expected = if x < 256 { Some(x) } else { None };
let actual = dont_panic(|| panic::catch_unwind(|| { assert!(x < 256); x }).ok());
expected == actual
}
quickcheck(check as fn(usize) -> bool);
}

如何在保持 QuickCheck 的 panic 可见的同时从我的代码中隐藏捕获的 panic ?

最佳答案

默认的 panic 处理程序在 stderr 上无条件地打印 panic 信息。

您想register your own handler .

关于testing - 我如何在 QuickCheck 测试中悄悄捕捉 panic ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38514554/

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