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[?]
我不清楚 Source
、Repr
、FlowOps
和 Out
之间的相互作用。
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()
}
进行单元测试时,模拟涉及 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[?]
我不清楚 Source
、Repr
、FlowOps
和 Out
之间的相互作用。
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()
}