我正在尝试为发送以下内容的演员编写测试:
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)
答案 0 :(得分:2)
如果您想接收Status.Failure
作为消息,则不应使用询问模式?
,而应使用Tell !
。
原因是询问模式将消耗Failure
并传回失败的Future
。如果是询问模式,则需要声明失败的Future
。
来自akka.actor.Status.Failure
的Scala文档
此类别/消息类型优选用于指示某些执行的操作失败。 例如,它与AskSupport一起用于表示故障(询问/?)。