Ошибка утверждения тестового примера Akka - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь написать тест для актера, который отправляет:

sender() ! Status.Failure(message)

Я написал тестовый пример как:

class TestActorSpec
    extends TestKit(ActorSystem("system"))
    with ImplicitSender
    with WordSpecLike
    with Matchers {
  implicit val executionContext: ExecutionContextExecutor = system.dispatcher
  implicit val futureDuration: FiniteDuration             = 60.seconds
  val timeout: FiniteDuration                             = 5.seconds
  val testActorRef: ActorRef                              = system.actorOf(Props(new TestActor()), "test-actor")

  val futureResult: Future[Any] = (testActorRef ? "Exception")(timeout)

  "TestSpec" should {
    "send the exception in {
      expectMsgType[Status.Failure]
    }
  }
}

Но я получаю ошибку теста по причине :

[info] java .lang.AssertionError: сбой утверждения: тайм-аут (3 секунды) во время ожидания expectMsgClass класса akka.actor.Status $ Failure [info] в scala .Predef $ .assert (предопределение scala: 223)

1 Ответ

2 голосов
/ 18 июня 2020

Если вы хотите получать Status.Failure как сообщение, вам не следует использовать шаблон запроса ?, а вместо этого использовать tell !.

Причина в том, что шаблон запроса потребляет Failure и возвращает неудачный Future. В случае шаблона запроса вам необходимо подтвердить неудачный Future.

From Scala docs of akka.actor.Status.Failure

Этот тип класса / сообщения предпочтительно используется для указания сбой какой-либо выполненной операции. Например, он используется для сигнализации отказа с помощью AskSupport (ask /?).

...