当通过QuickCheck测试失败的属性测试时,显示原因的最佳做法是什么?如何使用quickcheck显示失败测试属性的原因?
考虑例如:
prop a b = res /= []
where
(res, reason) = checkCode a b
然后会话可能看起来像:
> quickCheck prop
Falsifiable, after 48 tests:
42
23
但对于调试这将是非常方便的,以示对失败原因的快速检查falsifable的一部分报告。
我已经破解这样的:
prop a b = if res /= [] then traceShow reason False else True
where
(res, reason) = checkCode a b
是否有更好的/更好以上quickcheckish办法做到这一点?
那么,问题的关键是方便。成功的测试都是关于尽可能的自动化。不得不打开一个ghci会话并重新计算一个潜在的昂贵函数是没有意义的。我的意思是,QuickCheck已经提供`collect`,`classify`来丰富*非失败*属性测试的输出。这种富集是可选的,并不会降低灵活性。 – maxschlepzig 2011-01-23 12:33:23
我的意思是,这里还有一个实际的原因:QuickCheck属性可以是任意复杂的,所以任何给定测试的“输出”都不一定是明显的:你需要将你的代码按照“嘿” ,这里是我感兴趣的中间值!“假设你愿意做这个重写,虽然没有理由不提供这种功能,但是IIRC QuickCheck没有为此目的而烘焙的东西。 – 2011-01-23 12:52:18