fs2 流:测试 fs2 服务器
fs2 streams: testing an fs2 server
我有一个这种形式的流:
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()
在我测试后关闭服务器。
我想知道我是否可以使用信号来实现我的既定目标,以便我可以以某种方式 "wait" 信号,以便仅在信号启动后才进行 运行 测试。或者,我很想知道 generic/idiomatic 这样做的方法。
fs2 可以使用名为 Promise which can be used for this purpose. It's now deprecated but Cat's Deferred 的结构。所以在 运行 compile.drain
在流上之前,我们可以让流完成 promise/deferred 值,然后在 beforeAll
中我们可以等待它的值。
我有一个这种形式的流:
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()
在我测试后关闭服务器。
我想知道我是否可以使用信号来实现我的既定目标,以便我可以以某种方式 "wait" 信号,以便仅在信号启动后才进行 运行 测试。或者,我很想知道 generic/idiomatic 这样做的方法。
fs2 可以使用名为 Promise which can be used for this purpose. It's now deprecated but Cat's Deferred 的结构。所以在 运行 compile.drain
在流上之前,我们可以让流完成 promise/deferred 值,然后在 beforeAll
中我们可以等待它的值。