首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell,IO,monads,quickcheck

Haskell,IO,monads,quickcheck
EN

Stack Overflow用户
提问于 2014-03-02 12:32:06
回答 2查看 863关注 0票数 1

这里是哈斯克尔的初学者。

我有一个函数,还有一堆用来测试它的属性,我已经用它编写了quickcheck。当我在解释器中单独运行这些属性时,这些属性就可以工作了,并且函数可以正常运行。

然而,手动快速检查解释器中的每个属性(quickCheck prop_this,quickCheck prop_that)是枯燥、单调和耗时的。我想把所有这些都放在一个程序中,让这个程序运行所有的快速检查。这就是我被困的地方。

该方案的基本框架如下:

代码语言:javascript
复制
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并将其粘贴到外部,等等,但是什么都不能工作。

  1. 有人能帮上忙吗?
  2. 如果我想把main内部的所有东西都移动到另一个函数(正常的,非主的),我将如何做呢?

编辑:我很欣赏关于测试框架的建议,但是我在这里要求的是在任何其他语言中做一些琐碎的事情,而不应该需要一个测试框架。为什么不哈斯克尔?

同时,它在解释器内部也能正确工作。我无法让它在主内工作。知道为什么吗?

代码语言:javascript
复制
quickCheck prop_1 >> quickCheck prop_2 >> quickCheck prop_3

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-03-02 14:33:43

从问题中不太清楚您有哪些问题,但通常我建议使用测试框架(如鲜美 )将您的quickcheck测试组织在一起:

代码语言:javascript
复制
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包。

下面是执行时的样子:

票数 3
EN

Stack Overflow用户

发布于 2014-03-02 14:40:31

我以前用过TestFramework。它允许您创建任意嵌套的测试组,这为您提供了一种更改输入参数的方法。

代码语言:javascript
复制
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 -> ...)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22127558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档