我有一组 Happstack.State MACID 方法,我想使用 QuickCheck 进行测试,但我无法找出最优雅的方法来完成它。我遇到的问题是:
- 评估
Ev
monad 计算的唯一方法是在IO
monad 中通过query
orupdate
。 - 没有办法创建纯粹的内存 MACID 存储;这是设计使然。因此,在
IO
monad 中运行意味着每次测试后都有临时文件需要清理。 - 除了
initialValue
for 状态,没有办法初始化一个新的 MACID 存储;Arbitrary
除非我公开替换状态批发的访问方法,否则无法生成它。 - 解决上述所有问题意味着编写仅使用
MonadReader
or功能的方法(并在orMonadState
内部运行测试而不是. 这意味着放弃在方法定义中使用or等。Reader
State
Ev
getRandom
getEventClockTime
我能看到的唯一选择是:
- 在一次性磁盘 MACID 存储中运行这些方法,在每次测试后进行清理并从
initialValue
每次开始着手。 - 编写方法以使大部分代码在
MonadReader
or中运行MonadState
(这更容易测试),并根据需要在其周围使用少量非 QuickCheck-able 胶水来调用getRandom
orgetEventClockTime
。
有没有我忽略的更好的解决方案?