我通过Stack使用Haskell Test Framework来评估QuickCheck属性。当我运行stack test
时,会以Gave up! Passed only 95 tests
的形式报告失败的属性。很多属性测试的例子我发现报告失败的形式是Falsifiable, after 48 tests
,然后是失败的参数。但是,这些示例似乎是直接运行QuickCheck而不是通过Stack和HTF。
如何配置环境以报告QuickCheck生成的参数未能满足测试中的属性?正如Testing with HTF所指出的那样,单独使用这些工具的文档很少而且很差,更不用说将它们组合在一起了。
答案 0 :(得分:1)
prop_somePropertyWithRaisedDiscardThreshold =
withQCArgs (\args -> args { maxDiscardRatioy = 1000 })
somePredicateOrProperty
args
变量的类型为Args
,直接来自quickcheck包。
答案 1 :(得分:0)
“放弃!”意味着与“可证伪”不同的失败。
QuickCheck有一种方法可以丢弃您认为“不正确”的测试用例,既不会计入实际成功也不会失败。这种丢弃的典型来源来自使用蕴涵运算符(==>)
,其中不满足前提条件的测试用例被丢弃:“成功”仅在满足前提条件时计算,让您更好地了解您在何时向右侧测试后置条件(这可能是您作为用户真正重要的部分)。显式使用discard
属性也是可能的,与实际失败的含义不同,例如返回False
。
放弃测试因此不会伪造整个属性(错误前置条件的含义在逻辑上是正确的),但是太多丢弃的测试可能导致覆盖不足,这通过您观察到的失败发出信号,并且没有打印的反例。要解决此故障,请查找丢弃物的来源,可能的结果包括: