Mockito 模拟 Akka Streams

Mockito mocking Akka Streams

进行单元测试时,模拟涉及 Sources、Flows 和 Sinks 的 Akka Streams 调用的最佳方法是什么?


例如,takeWhile函数:

def takeWhile(p: Out => Boolean): Repr[Out]

其中 Repr 是特征中的特征:

trait FlowOps[+Out, +Mat] {
  import akka.stream.impl.Stages._
  import GraphDSL.Implicits._

  type Repr[+O] <: FlowOps[O, Mat] {
    type Repr[+OO] = FlowOps.this.Repr[OO]
    type Closed = FlowOps.this.Closed
  }

如果被测对象调用类似:mySource.takeWhile( ... ).runWith( ... )我可能需要模拟它...

你是怎么算出模拟出来的,例如,mock[Source[Any, Any]].takeWhile(*) returns mock[?]

我不清楚 SourceReprFlowOpsOut 之间的相互作用。

FlowOps 特征 warns 的源代码,它是内部的,不应从中派生...这会影响模拟它吗?

对于使用 Akka Streams 组件的基本测试,您不需要模拟任何东西;只需使用 testkit. For inspiration, check out the tests in the Akka repository. Here is an example from the FlowTakeWhileSpec:

"take while predicate is true" in assertAllStagesStopped {
  Source(1 to 4).takeWhile(_ < 3).runWith(TestSink.probe[Int]).request(3).expectNext(1, 2).expectComplete()
}