使用quickCheck测试带有有界值列表的函数

时间:2015-03-17 18:24:13

标签: haskell quickcheck

我需要用quickCheck测试一些函数来验证这些函数。

我需要将140的范围内的值发送给函数,但我是初学quickCheck并且它是修饰符。

我试过了:

myTestFunction (x,y,z) (Positive div) = ....

quickCheck myTestFunction

div仍然是积极的,但可以采取非常高的价值(我不想要)

ab范围内提供div随机值的正确方法是什么?

是否也可以将值(非随机)列表强加给quickCheck

1 个答案:

答案 0 :(得分:3)

您需要结合两个部分。第一个是generation - 您需要编写一个QuickCheck随机生成器,输出所需范围内的数字。令人高兴的是,我们可以通过内置函数来实现这一目标:

choose :: Random a => (a, a) -> Gen a

接下来,我们需要指定一个使用此自定义生成器的属性。这就是property combinators真正派上用场的地方。同样,我们想要的功能是文档部分中的第一个:

forAll :: (Show a, Testable prop) => Gen a -> (a -> prop) -> Property

这让我们可以将自定义生成器传递给函数参数。

将所有这些放在一起,测试用例看起来像这样:

prop_myTest (x, y, z) = forAll (choose (1, 40)) $ \ ndiv -> ...

" prop_"命名方案通常用于QuickCheck测试。这将有助于人们快速了解您的代码中发生了什么,并被某些测试框架使用,因此这是一个很好的习惯。