什么是快速检查1和快速检查2之间的主要区别?通过观察黑线鳕文档我可以看到,它是跨多个模块分割,coarbitrary已经换成新的Fun类型和FunArbitrary类(这似乎更容易理解我),并测试一元代码现在支持。我还有什么需要留意的?

有帮助吗?

解决方案

我见过的一个重大进步在快速检查2,我觉得作为一元代码的测试一样重要,如果不是更多:

class Arbitrary  a where
    arbitrary :: Gen a
    shrink :: a -> [a]

此,是的确实真棒。收缩方法是可选的,但如果你能提供的“可能是空的”减少你的类型的列表,然后在快速检查发现有故障的检查,它会尝试努力缩小它来减少你的错误数据到最小,然后再 - 测试它。只要它失败收缩它。

一个小样品说服你,无萎缩:

FormulaPrim deparsing    : *** Failed! Falsifiable (after 4 tests):
Poly (Polynome "p" [(CoeffRatio (26 % 25),PolyRest (CoeffRatio (129 % 40))),(CoeffInt 96,PolyRest (CoeffInt 11)),(CoeffInt 29,PolyRest (CoeffRatio (147 % 121))),(CoeffRatio (62 % 9),PolyRest (CoeffRatio (90 % 43))),(CoeffInt 56,PolyRest (CoeffInt 27))])

使用:

FormulaPrim deparsing    : *** Failed! Falsifiable (after 2 tests and 3 shrinks):
Poly (Polynome "t" [(CoeffInt 14,PolyRest (CoeffInt 126))])

更短的失败例意味着更快调试: - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top