使用 quickCheck 测试带有边界值列表的函数
Test a function with a list of bounded value with quickCheck
我需要用 quickCheck
测试一些功能,请验证这些功能。
我需要将 1
到 40
范围内的值发送到该函数,但我对 quickCheck
和它的修饰符非常陌生。
我试过了:
myTestFunction (x,y,z) (Positive div) = ....
和
quickCheck myTestFunction
div
保持积极但可以取得非常高的价值(我不想要)
在 a
到 b
范围内给出 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 测试。这将帮助人们快速了解你的代码中发生了什么,并被一些测试框架使用,所以现在进入是一个好习惯。
我需要用 quickCheck
测试一些功能,请验证这些功能。
我需要将 1
到 40
范围内的值发送到该函数,但我对 quickCheck
和它的修饰符非常陌生。
我试过了:
myTestFunction (x,y,z) (Positive div) = ....
和
quickCheck myTestFunction
div
保持积极但可以取得非常高的价值(我不想要)
在 a
到 b
范围内给出 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 测试。这将帮助人们快速了解你的代码中发生了什么,并被一些测试框架使用,所以现在进入是一个好习惯。