如何使用 expectMsgClass 测试 Akka Action

how to test Akka Action with expectMsgClass

我是 scala akka 的新手

在我的测试代码中我有这个

  val sendEmailActor = system.actorOf(SendEmailActor.props)

  sendEmailActor ! email

  expectMsgClass(SendEmailActor.SendEmailResult.getClass)

但是我测试失败了。

java.lang.AssertionError: assertion failed: 
expected class vndirect.elasticemail.actor.SendEmailActor$SendEmailResult$, 
found class vndirect.elasticemail.actor.SendEmailActor$SendEmailResult

所以我的 SendEmailActor return 和预期的一样 SendEmailResult。但是测试单元失败了。我不知道为什么。 SendEmailActor$SendEmailResult$SendEmailActor$SendEmailResult

有什么区别

你可能有类似的东西

object SendEmailActor {
  ...
  case class SendEmailResult(some arguments)
  object SendEmailResult // may be compiler generated
}

class SendEmailActor {
  // has ... ! SendEmailResult(...) in some method
}

SendEmailActor.SendEmailResult.getClassobject SendEmailResult 的 class。 class SendEmailResult 的 class 是 classOf[SendEmailActor.SendEmailResult],所以这是你应该期待的。

我遇到这个问题时遇到了类似的问题,但建议的答案无效。我的任务是检查用作 Akka 消息的简单案例 class 的到达。

解决方案是使用:

expectMsgType[Message]

而不是 expectMsgClass。 (注意 "Type" 而不是 "Class"。)