Haskell QuickCheck如何测试每个样本的所有属性
…而不是为每个属性生成100个新的随机样本 我的测试套件包含此处[1]解释的TemplateHaskell hack 测试名为prop_u*的所有函数。运行测试程序打印Haskell QuickCheck如何测试每个样本的所有属性,haskell,template-haskell,quickcheck,Haskell,Template Haskell,Quickcheck,…而不是为每个属性生成100个新的随机样本 我的测试套件包含此处[1]解释的TemplateHaskell hack 测试名为prop_u*的所有函数。运行测试程序打印 === prop_foo from tests/lala.lhs:20 === +++ OK, passed 100 tests. === prop_bar from tests/lala.lhs:28 === +++ OK, passed 100 tests. 它看起来像是对每一个样本进行了100个随机抽样 财产 问题是:
=== prop_foo from tests/lala.lhs:20 ===
+++ OK, passed 100 tests.
=== prop_bar from tests/lala.lhs:28 ===
+++ OK, passed 100 tests.
它看起来像是对每一个样本进行了100个随机抽样
财产
问题是:生成样本非常昂贵,检查
属性不是。所以我想有一个方法来通过每一个随机测试
对每个prop_*函数进行采样,而不是创建新函数
(#properties*100)许多样本
里面有没有类似的东西?事实上,我想我需要一个
接头的更换
$(forAllProperties)
在
main::IO()
主要的
=do args在这篇文章中,您可以看到如何对测试进行分组
该用户提供了一个非常简单的使用示例Test.Tasty.QuickCheck
使用testProperty和testGroup,您可以将每个随机样本传递给每个属性
在下一个链接中,您可以检查此软件包的黑客行为
propAllOfThem x=all($x)[prop1,prop2,prop3]
?@DanielWagner:如果你实际上是指($x)
,那么我不明白(回忆一下:模板Haskell!)。如果您的意思是($x)
,那么不,这有几个缺点:属性不会自动收集,如果失败,我看不出是哪一个,QuickCheck只报告属性AllOfThem
。这并不能解决我的问题,请参阅上面对@DanielWagner的评论。
main :: IO ()
main
= do args <- parseArgs <$> getArgs
s <- $(forAllProperties) $ quickCheckWithResult args
s ? return () $ exitFailure
where
parseArgs as
= null as ? stdArgs $ stdArgs{ maxSuccess = read $ head as }