我有一个 QuickCheck 属性测试一个功能f
。该属性将函数映射到f
某个列表xs
并检查结果的某些元素属性。在失败的情况下,我想显示xs
与此失败相关的元素。考虑以下属性:
prop x =
printTestCase ("Failed for value " ++ show failure) $ isNothing failure
where
failure = fmap fst $ find (not . snd) $ map (\n -> (n, f x n == n)) [10..20]
这适用于实施
f = (+)
和quickcheck prop
输出
*** Failed! Falsifiable (after 2 tests):
1
Failed for value Just 10
但是,如果f
抛出异常,即
f = undefined
然后quickcheck prop
输出
*** Failed! Exception: 'Prelude.undefined' (after 1 test):
()
Failed for value Exception thrown by generator: 'Prelude.undefined'
如何编写一个捕获第二个异常并返回“Just 0”的属性,就像前面的示例一样?我想,可以使用whenFail
or whenFail'
,但我还不了解 QuickCheck 的内部结构。