Мокито издевается над Akka Streams - PullRequest
1 голос
/ 21 октября 2019

При модульном тестировании, каков наилучший подход к отключению вызовов Akka Streams с использованием источников, потоков и приемников?


Например, takeWhile function:

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 черты предупреждает , что это внутреннее и что от него не следует извлекать ... это влияет на насмешку?

1 Ответ

4 голосов
/ 21 октября 2019

Для базовых тестов вам не нужно ничего подделывать с компонентами Akka Streams;просто используйте testkit . Для вдохновения проверьте тесты в хранилище Akka . Вот пример из FlowTakeWhileSpec:

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