gpt4 book ai didi

testing - Haskell QuickCheck 最佳实践(尤其是在测试类型类时)

转载 作者:行者123 更新时间:2023-11-28 19:39:51 27 4
gpt4 key购买 nike

我刚刚开始使用带有一堆 Haskell 代码的 QuickCheck。我落后于时代了,我知道。这个问题是两个部分:

首先,快速检查的一般最佳做法是什么?到目前为止,我已经找到了以下内容:

  • 将您的测试命名为 prop_*(很烦人,因为其他一切都是驼峰式命名)
  • 测试导出的代码(如果您正在测试内部结构,您可能做错了)
  • 测试属性,而不是示例
    • 不要说 X 超出范围,Y 在范围内
    • 相反,说如果 x 超出范围,则规范化 x ≠ x(或其他一些此类属性)

但我仍在掌握其他最佳实践。特别是:

  • 属性保存在哪里?
    • 同一个文件?
    • test/ 目录中? (如果是这样,那么你如何导入src/中的东西?)
    • src 下的 Properties/ 目录中?

最重要的是,我们倾向于如何测试类型类的属性?例如,考虑以下(简化的)类型类:

class Gen a where
next :: a -> a
prev :: a -> a

我想测试属性 ∀ x: prev (next x) == x。当然,这涉及为每个实例编写测试。为每个实例编写相同的属性是很乏味的,尤其是当测试更复杂时。概括此类测试的标准方法是什么?

最佳答案

It's tedious to write the same property for each instance

你不这样做。您为类编写一次属性:

class Gen a where
next :: a -> a
prev :: a -> a

np_prop :: (Eq a, Gen a) => a -> Bool
np_prop a = prev (next a) == a

然后为了测试它,您转换为特定类型:

quickCheck (np_prop :: Int -> Bool)
quickCheck (np_prop :: String -> Bool)

你的其他问题我帮不上忙

关于testing - Haskell QuickCheck 最佳实践(尤其是在测试类型类时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com