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