【发布时间】:2010-06-03 00:47:26
【问题描述】:
我有一组 Happstack.State MACID 方法,我想使用 QuickCheck 进行测试,但我无法找出最优雅的方法来完成它。我遇到的问题是:
- 评估
Evmonad 计算的唯一方法是通过query或update在IOmonad 中。 - 无法创建纯粹的内存 MACID 存储; this is by design。因此,在
IOmonad 中运行意味着每次测试后都有临时文件需要清理。 - 除了
initialValue用于状态外,无法初始化新的 MACID 存储;它不能通过Arbitrary生成,除非我公开一个替换状态批发的访问方法。 - 解决上述所有问题意味着编写仅使用
MonadReader或MonadState功能的方法(并在Reader或State中运行测试而不是Ev。这意味着放弃使用@方法定义中的 987654334@ 或getEventClockTime等。
我能看到的唯一选项是:
- 在一次性磁盘 MACID 存储中运行方法,在每次测试后进行清理并确定每次从
initialValue开始。 - 编写方法让大部分代码在
MonadReader或MonadState(更容易测试)中运行,并在其周围使用少量非 QuickCheck-able 胶水,调用getRandom或getEventClockTime(根据需要)。
有没有我忽略的更好的解决方案?
【问题讨论】:
标签: haskell quickcheck happstack