作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 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 信息。
关于testing - 我如何在 QuickCheck 测试中悄悄捕捉 panic ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38514554/
我是一名优秀的程序员,十分优秀!