代码之家  ›  专栏  ›  技术社区  ›  Paul Kuliniewicz

有没有快速检查Happstack.State方法的好方法?

  •  2
  • Paul Kuliniewicz  · 技术社区  · 14 年前

    • 唯一能评估 Ev 单子计算在 IO 蒙纳德via query update .
    • 没有办法创建一个纯粹的内存MACID存储; this is by design . 因此,在 木卫一 monad意味着每次测试后都有临时文件需要清理。
    • 除了使用 initialValue 为了国家;它不能通过 Arbitrary
    • 解决上述所有问题意味着编写只使用 MonadReader MonadState (并在内部运行测试 Reader State . 这意味着放弃使用 getRandom getEventClockTime

    我能看到的唯一选择是:

    • 在一次性磁盘MACID存储中运行这些方法,在每次测试之后进行清理,并准备从 每次。
    • 编写方法以使大部分代码在 单子 单子状态 获取随机 必要时。

    有没有更好的解决方案,我忽略了?

    2 回复  |  直到 14 年前
        1
  •  1
  •   stepcut    14 年前

    您可以签出happstack state中包含的quickcheck属性:

    http://patch-tag.com/r/mae/happstack/snapshot/current/content/pretty/happstack-state/tests/Happstack/State/Tests

    这对initialValue问题没有帮助,但它确实使选项1变得更容易,因为您不必进行任何磁盘清理。

    要替换initialValue,您需要创建自己的方法来替换当前状态。

    比如:

    newState :: YourState -> Update YourState ()
    newState st = put st
    

    • 杰里米
        2
  •  0
  •   Antoine Latter    14 年前

    如果将函数编写为MonadState上的多态(或用于查询的MonadReader),那么使用runState/runReader设置测试工具就容易多了。