2017-04-11 78 views
0

我通过堆栈使用Haskell测试框架来评估QuickCheck属性。当我运行stack test时,失败的属性以Gave up! Passed only 95 tests的形式报告。财产测试的很多例子中,我发现报告失败的形式为Falsifiable, after 48 tests,然后是失败的参数。但是,这些示例似乎是直接运行QuickCheck,而不是通过Stack和HTF运行。如何报告失败的测试用例

如何配置我的环境以报告QuickCheck生成的参数未能满足待测属性?正如在Testing with HTF中指出的那样,对于这些工具中的一些工具来说文档已经很少,很少,更不用说将它们组合在一起。

回答

0

“大起大落!”意味着与“可证伪”不同的故障。

QuickCheck有一种方法可以丢弃您认为“不正确”的测试用例,既不计算实际成功或失败。这种丢弃物的典型来源来自使用蕴涵运算符(==>),其中不符合前提条件的测试用例被丢弃:只有在满足前提条件时才计算“成功”,以便更好地了解你正在测试右边的后置条件(这可能是你作为用户真正重要的部分)。明确使用discard财产也是可能的,具有与实际失败不同的含义,例如返回False

因此,废弃的测试不会伪造整个属性(具有错误前提条件的含义在逻辑上是正确的),但是过多的废弃测试可能导致覆盖率不足,这是通过您观察到的失败来标志的,并且存在没有反例印刷。要解决此故障,请查找丢弃物来自何处,可能的结果包括:

  • 使用更好的发生器(避免丢弃);
  • 提高丢弃阈值,@stefanwehr显示如何在HTF中做另一个答案;
  • 这些丢弃实际上应该是失败。
+0

至于预期,真正的问题是我的一套假设。谢谢。 – CAPSLOCK

+0

我诚实地努力寻找关于如何为HTF指定选项的任何信息。这是打算通过命令行传递?是否也有程序化选项?我找不到任何这些工具的完整文档,这是非常令人沮丧的。 – CAPSLOCK

+0

对不起,我把你提到的HTF与我最后谈论的测试框架混淆了。 @stefanwehr有关于如何设置该特定选项的答案。似乎没有从命令行指定它的内置方式。 –

1

@李夏瑶说的对,你的发电机产生了很多可丢弃的测试用例。为了提高与HTF丢弃阈,你会写你的财产是这样的:

prop_somePropertyWithRaisedDiscardThreshold = 
    withQCArgs (\args -> args { maxDiscardRatioy = 1000 }) 
    somePredicateOrProperty 

args变量从快速检查封装类型Args,直接。