从Scala REPL访问ZIO测试生成器的最简单方法



我刚开始在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]的最快方法是什么

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

对于只在REPL上打印Gen中的一些样本,这是有效的:

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

但我不认为这是应该做的provideLayer不进行类型检查,除非我同时提供RandomSized,即使Random应该是zio.Runtime.default的一部分。我认为ZLayer有一些我仍然不理解的地方。

最新更新