【问题标题】:Easiest way to access ZIO test generators from Scala REPL?从 Scala REPL 访问 ZIO 测试生成器的最简单方法是什么?
【发布时间】:2021-09-20 16:34:09
【问题描述】:

我刚开始在 Scala 中使用 ZIO。我已经使用 ZIO 的 Gen 类型编写了一些 Scalacheck 风格的测试,它们似乎可以工作,但我想手动测试 REPL 中的生成器,以确保它们实际上生成了我期望的数据。

问题:ZIO 中的所有内容都包装在 ZIO monad 中,我需要将正确的数据传递到这个 monad 中才能解包并查看结果。并且在 REPL 中没有解释如何执行此操作的文档。

我想我了解如何为没有环境依赖的基本程序执行此操作:致电zio.Runtime.default.unsafeRun。但是Gen 对象需要Random with Sized 类型的环境,我不知道如何生成它的实例。

给定一个 Gen[Random with Sized, T],在 REPL 上执行它并获得生成值的 List[T] 的最快方法是什么?

【问题讨论】:

    标签: scala functional-programming read-eval-print-loop zio


    【解决方案1】:

    我想我找到了部分解决方案,但我并不完全满意。

    对于仅从 REPL 上的 Gen 打印一些样本,这可行:

    zio.Runtime.default.unsafeRun(
      yourGenerator
        .runCollectN(50)
        .provideLayer(zio.random.Random.live +!+ zio.test.Sized.live(100))
    ) foreach println
    

    但我不认为这是应该完成的。 provideLayer 不会进行类型检查,除非我提供 both RandomSized,即使 Random 应该是 zio.Runtime.default 的一部分。我认为ZLayer 有一些我仍然不明白的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多