2016-07-06 50 views
4

...而不是为每个属性生成100个新的随机样本?QuickCheck如何测试每个样本的所有属性

我的测试套件包含此处解释的TemplateHaskell hack [1]至 测试名为prop_ *的所有函数。在运行测试程序打印

=== 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)多个样本。

有没有像这样的内置?其实,我觉得我需要在

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 } 

[1] Simple haskell unit testingQuickCheck exit status on failures, and cabal integration

+2

'propAllOfThem x = all($ x)[prop1,prop2,prop3]'? –

+1

@DanielWagner:如果你的意思是'($ x)',那我就不明白了(回想一下:模板哈斯克尔!)。如果你的意思是'($ x)',那么不是,这有几个缺点:属性不会自动收集,如果失败,我不会看到哪一个,QuickCheck只报告'prop_AllOfThem'。 – stefan

回答

0

在这篇文章中,你可以看到一个 替代接续

$(forAllProperties) 

如何分组测试

Stackoverflow post

该用户提供使用的一个很简单的例子Test.Tasty.QuickCheck

使用testPropertytestGroup您可以在每个随机抽样传递到每个属性

在接下来的环节你可以查看这个包的hackage

Test.Tasty.QuickCheck

+0

无法解决我的问题,请参阅上面对@DanielWagner的评论。 – stefan

相关问题