问题23:从列表中提取给定数量的随机选择的元素。
这是一个局部的解决方案。为了简单起见,这段代码只从列表中选择一个元素。
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。谢谢。
发布于 2017-10-17 13:51:21
有几件事你可以做。如果使用的是QuickCheck,则可以编写以下属性:
除此之外,Haskell随机库的优点是(和大多数其他Haskell代码一样)它是确定性的。如果您的实现不是基于randomRIO,而是可以基于randomR或randomRs。这将使您能够将一些已知的RandomGen值传递给某些确定性的单元测试用例(而不是QuickCheck)。这些可以作为回归测试。
我现在已经发布了关于上述方法的一篇文章,包括源代码。
https://stackoverflow.com/questions/46791466
复制相似问题