我有一套我想用QuickCheck测试的Happstack.State MACID方法,但是我很难找出最优雅的方法来完成它。我遇到的问题是:有QuickCheck Happstack.State方法的好方法吗?
- 的唯一方法来评估
Ev
单子计算是通过query
或update
的IO
单子。 - 无法创建纯粹的内存中MACID存储; this is by design。因此,在
IO
monad中运行的东西意味着在每次测试后都有临时文件要清理。 - 除了状态为
initialValue
之外,没有办法初始化新的MACID存储区;它不能通过Arbitrary
生成,除非我公开一个取代批发状态的访问方法。 - 围绕所有上述装置写入仅使用内部
Reader
或State
代替Ev
的MonadReader
或MonadState
(和运行测试特征的方法的工作,这意味着放弃使用getRandom
或getEventClockTime
和方法定义内等。
我能看到的唯一选项是:
- 运行在磁盘上的MACID商店扔掉的方法,清理在每次试验后和解决从开始每次。
- 编写方法使大部分代码运行在
MonadReader
或MonadState
(它更容易测试),并依靠少量不可快速检查的胶水,并根据需要调用getRandom
或getEventClockTime
。
有没有更好的解决方案,我忽略了?
withMemorySaver的问题在于它需要使用-f测试来构建happstack-state,这不是默认设置,也不是它最初安装在我的盒子上的方式。我不想公开一个完全取代状态的方法,但我想我可以编写一个使用MemorySaver并运行NewState的函数,并且公开* *来代替NewState本身。 – 2010-06-06 00:47:30
嗯。 MemoryMeaver对测试套件来说有点特定。 理论上你应该能够做到: CTL < - runTxSystem(FMAP内存newMemoryStore)(代理::代理MyState) 但是,出于某种原因Happstack.State.Saver.Impl.Memory不外露。我会在下一个版本中解决这个问题。 – stepcut 2010-06-06 01:54:41