Как я могу проверить, что приемник akka-streams был вызван?

У меня есть вариант использования, когда я передаю приемник какому-то актеру, поэтому я также могу передать TestSink

Когда этот актер получает сообщение, я передаю сообщение этому приемнику, используя

case class SomeActor[T, U](sink: Sink[U, NotUsed] {
  def behavior: Behavior[T] = Behavors.receive[T] { (ctx, msg) =>
    msg match {
      case MessageT =>
        ref = sink.runWith(ActorSource.actorRef[U](PartialFunction.empty, PartialFunction.empty, 0, OverflowStrategy.fail)
        ref ! MessageU
        Behaviors.same
    }
  }
}

Как я могу проверить, что приемник получил MessageU?


person mrt181    schedule 17.09.2020    source источник


Ответы (1)


Попробуйте использовать akka-stream-testkit (https://doc.akka.io/docs/akka/current/stream/stream-testkit.html). Тестовый код для вашего примера (исключая типы, чтобы он оставался чистым):

val probe = TestProbe()
val sink = Sink.actorRef(probe.ref, onCompleteMessage = "completed", onFailureMessage = _ => "failed"))
val someActor = SomeActor(sink)

// use someActor.behavior

probe.expectMsg(1.second, MessageU)
person Ava    schedule 17.09.2020