Akka测试用例断言失败

时间:2020-06-18 16:02:52

标签: scala akka akka-testkit

我正在尝试为发送以下内容的演员编写测试:

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]
    }
  }
}

但是我由于以下原因而导致测试失败:

[信息] java.lang.AssertionError:断言失败:ExpectMsgClass等待class akka.actor.Status $ Failure期间超时(3秒) [info]位于scala.Predef $ .assert(Predef.scala:223)

1 个答案:

答案 0 :(得分:2)

如果您想接收Status.Failure作为消息,则不应使用询问模式?,而应使用Tell !

原因是询问模式将消耗Failure并传回失败的Future。如果是询问模式,则需要声明失败的Future

来自akka.actor.Status.Failure的Scala文档

此类别/消息类型优选用于指示某些执行的操作失败。 例如,它与AskSupport一起用于表示故障(询问/?)。

相关问题