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

Test a function with a list of bounded value with quickCheck

我需要用 quickCheck 测试一些功能,请验证这些功能。

我需要将 140 范围内的值发送到该函数,但我对 quickCheck 和它的修饰符非常陌生。

我试过了:

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

quickCheck myTestFunction

div 保持积极但可以取得非常高的价值(我不想要)

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

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

您需要合并两个部分。第一个是 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 测试。这将帮助人们快速了解你的代码中发生了什么,并被一些测试框架使用,所以现在进入是一个好习惯。