首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Haskell中的Int和类似的单元测试

Haskell中的Int和类似的单元测试
EN

Stack Overflow用户
提问于 2017-10-17 13:32:09
回答 1查看 522关注 0票数 8

来自90个Haskell问题

问题23:从列表中提取给定数量的随机选择的元素。

这是一个局部的解决方案。为了简单起见,这段代码只从列表中选择一个元素。

代码语言:javascript
复制
import System.Random (randomRIO)

randItem :: [a] -> IO a
randItem xs = do
    i <- randomRIO (0,length xs - 1)
    return $ xs !! i

因此,randItem [1..10]将返回一个对应于(但不等于)从1到10之间的Int的IO Int

到现在为止还好。但是我可以为我的randItem函数编写什么样的测试呢?什么关系--如果有的话--我可以确认输入和输出之间的关系吗?

我可以使用与上述函数相同的逻辑来生成m Bool,但我不知道如何测试m Bool。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-17 13:51:21

有几件事你可以做。如果使用的是QuickCheck,则可以编写以下属性:

  • 返回列表的长度应该等于输入长度。
  • 返回列表中的所有元素都应该是候选人列表中的元素。

除此之外,Haskell随机库的优点是(和大多数其他Haskell代码一样)它是确定性的。如果您的实现不是基于randomRIO,而是可以基于randomRrandomRs。这将使您能够将一些已知的RandomGen值传递给某些确定性的单元测试用例(而不是QuickCheck)。这些可以作为回归测试。

我现在已经发布了关于上述方法的一篇文章,包括源代码

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46791466

复制
相关文章

相似问题

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