我需要用quickCheck
测试一些函数来验证这些函数。
我需要将1
到40
的范围内的值发送给函数,但我是初学quickCheck
并且它是修饰符。
我试过了:
myTestFunction (x,y,z) (Positive div) = ....
与
quickCheck myTestFunction
div
仍然是积极的,但可以采取非常高的价值(我不想要)
在a
到b
范围内提供div随机值的正确方法是什么?
是否也可以将值(非随机)列表强加给quickCheck
?
答案 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测试。这将有助于人们快速了解您的代码中发生了什么,并被某些测试框架使用,因此这是一个很好的习惯。