我有一个这种形式的流:
val server = for {
_ <- Stream.eval(initTasks)
serverBinding <- Stream.eval(...)
} yield serverBinding我知道为了运行它,我应该这样做:
server
.compile
.drain
.unsafeRunAsync(_ => ())现在,我想为这个服务器编写单元测试,但我只能在服务器完全设置好的情况下运行我的测试。目前,在我的beforeAll块中,我有:
testServer
.interruptWhen(shutdownSignal)
.compile
.drain
.unsafeRunAsync(_ => ())
Thread.sleep(5000)在我的afterAll块中,我有:
shutdownSignal.set(true).unsafeRunSync()在我测试后关闭服务器。
我想知道我是否可以使用信号来实现我声明的目标,这样我就可以以某种方式在信号上“等待”,这样测试只在信号打开时运行。或者,我很想知道做这件事的通用/习惯方法。
发布于 2019-01-22 19:20:11
fs2有一个名为Promise的结构,可以用于此目的。它现在是deprecated,但是可以使用Cat的Deferred。因此,在对流运行compile.drain之前,我们可以让流完成promise/deferred值,然后在beforeAll中等待它的值。
https://stackoverflow.com/questions/54282056
复制相似问题