我刚开始在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
不进行类型检查,除非我同时提供Random
和Sized
,即使Random
应该是zio.Runtime.default
的一部分。我认为ZLayer
有一些我仍然不理解的地方。