这里是哈斯克尔的初学者。
我有一个函数,还有一堆用来测试它的属性,我已经用它编写了quickcheck。当我在解释器中单独运行这些属性时,这些属性就可以工作了,并且函数可以正常运行。
然而,手动快速检查解释器中的每个属性(quickCheck prop_this,quickCheck prop_that)是枯燥、单调和耗时的。我想把所有这些都放在一个程序中,让这个程序运行所有的快速检查。这就是我被困的地方。
该方案的基本框架如下:
imports...
function_which_i_want_to_quickcheck
prop_1
prop_2
etc...
main = do
quickCheck prop_1
quickCheck prop_2
etc...我相信,上面的所有东西都很好,因为没有它,它们都会编译和工作。主要是我需要帮助。我尝试过几个变体,即没有do、使用do、使用'x <- quickCheck y‘分配结果、从内部移除quickCheck并将其粘贴到外部,等等,但是什么都不能工作。
编辑:我很欣赏关于测试框架的建议,但是我在这里要求的是在任何其他语言中做一些琐碎的事情,而不应该需要一个测试框架。为什么不哈斯克尔?
同时,它在解释器内部也能正确工作。我无法让它在主内工作。知道为什么吗?
quickCheck prop_1 >> quickCheck prop_2 >> quickCheck prop_3谢谢。
发布于 2014-03-02 14:33:43
从问题中不太清楚您有哪些问题,但通常我建议使用测试框架(如鲜美 )将您的quickcheck测试组织在一起:
import Test.Tasty
import Test.Tasty.QuickCheck
main = defaultMain $ testGroup "Tests"
[ testProperty "+ is commutative" $
\x y -> x + y == (y + x :: Double)
, testProperty "+ is associative" $
\x y z -> (x + y) + z == (x + (y + z) :: Double)
]要运行这个程序包,您需要安装tasty-quickcheck包。
下面是执行时的样子:

发布于 2014-03-02 14:40:31
我以前用过TestFramework。它允许您创建任意嵌套的测试组,这为您提供了一种更改输入参数的方法。
main = do
defaultMain $ [tier1_tests, ...]
tier1_tests = testGroup "Level One Tests" [tier2_tests1, tier2_tests2, ...]
tier2_tests1 = testGroup "Level Two Testgroup 1" [tier3_tests1, youGetTheIdea, ...]
]
tier3_tests1 = testGroup "Level Three Testgroup" [
testProperty "m=32 random encoding with good x" (prop_realTest1 8 32 True),
testProperty "m=256 random encoding bad x" (prop_realTest2 128 256 False),
... ]
prop_realTest1 m goodq b = forAll arbitrary (\ x -> ...)https://stackoverflow.com/questions/22127558
复制相似问题