我正在试验reactive Streams的Test Compatability Kit (tck)
,并且我自己测试了几个Publisher,我想测试一个akka Source
。但为了做到这一点,我需要将源(或源+处理器)转换为java.util.concurrent.Flow.Publisher
。
@Override
public Flow.Publisher<Integer> createFlowPublisher(long elements) {
return new FlowPublisher((int) elements); // <-- how to test an akka.Source?
}
class FlowPublisher implements java.util.concurrent.Flow.Publisher {
...
我不知道该怎么做。
有没有一些关于这个问题的文档,或者有人知道答案?
发布于 2019-07-11 20:08:21
您可以将akka-streams Source
转换为org.reactivestreams.Publisher
(与reactive-streams中的java.util.concurrent.Flow
相同):
implicit val sys: ActorSystem = ActorSystem()
implicit val mat: ActorMaterializer = ActorMaterializer()
val source = Source.single(1) // some random source
val publisher: Publisher[Int] = source.runWith(Sink.asPublisher(false))
您可以在官方akka-streams文档- Integrating with Reactive Streams中找到详细信息
值得注意的是,akka-streams有文档和一些用于测试其组件- Testing streams的工具包。我想说的是,使用akka-streams测试工具包测试akka-streams组件更好,因为您不需要对org.reactivestreams.*
实体进行额外的转换,并且测试代码将更加干净、简单和可靠
https://stackoverflow.com/questions/56977366
复制