【发布时间】:2014-02-16 02:08:46
【问题描述】:
我正在使用 Haskell 和 QuickCheck 为以下函数编写测试:
{-| Given a list of points and a direction, find the point furthest
along in that direction. -}
fn :: (Eq a, Ord a, DotProd a) => [a] -> a -> a
fn pnts dir = pnts !! index
where index = fromJust $ elemIndex (maximum dotproducts) dotproducts
dotproducts = map (dot dir) pnts
我相信这个实现是正确的,因为它不是一个太复杂的函数。但是,我想使用 QuickCheck 来测试一些边缘情况。
但是,我遇到的问题是,当我定义我的 QuickCheck 测试时,它们与我正在测试的函数相同。
如何在 QuickCheck 中编写一个测试来测试函数的用途而不重复其实现?
【问题讨论】:
-
如果有人觉得这个问题太笼统,请考虑这是一个专门针对函数
fn的问题。 -
如果您能分享一些关于您的问题的更多信息,例如特定的不充分测试、您对它的期望以及 DotProd 类型类的来源,将会有所帮助。
-
你能写一个
Arbitrary吗?一个方向?如果是,那么随机生成的点的什么性质不令人满意? -
请添加更多信息,以便您的代码为self-contained。特别是
DotProd的定义及其一些实例。如果您添加了您尝试过的 QuickCheck 测试,也会有所帮助。 -
编码提示:查看
Data.List中的maximumBy函数。使用fromJust是不安全的,因为它会引发异常。
标签: unit-testing haskell testing quickcheck