QuickCheck和State monad

时间:2017-02-04 20:13:51

标签: haskell quickcheck state-monad

我编写了一个Haskell模块,其中包含在某些状态下运行的函数。让我们说代码看起来像这样(实际函数可能会返回实际结果而不是(),但这与问题无关):

data StateContext = StateContext {
  -- some records
}

handleEventA :: EventA -> State StateContext ()
handleEventB :: EventB -> State StateContext ()
handleEventC :: EventC -> State StateContext ()

您可以想象每个函数的行为取决于当前状态。例如,handleEventA >> handleEventB不会产生与handleEventB >> handleEventA相同的结果。所以我有几个HUnit测试可以验证几个状态下每个函数的行为。

但现在我想编写更多测试,在所有可能的状态下执行所有函数(状态数是有限的)。用HUnit编写它们会非常劳动,所以我认为在这种情况下使用QuickCheck可能会有所帮助(我之前只使用它来处理琐碎的函数)。

但是我看不出应该测试哪些属性,或者测试应该生成什么样的数据。我怀疑测试应该生成随机的事件序列(例如handleEventB >> handleEventC >> handleEventA等),但我看不出应该满足哪些属性。

0 个答案:

没有答案