使用 Akka Actor 的单元测试组件

Unit Testing Components that Uses an Akka Actor

首先,我不是在问如何对 Akka Actor 进行单元测试。我知道这样做的技巧。我的问题略有不同。

我正在开发一个不使用 Akka Actors 的 Scala 程序,我们称之为 client。但是,该程序使用了一个库,我们称之为 server,其接口是使用 Akka Actor 实现的。

然后,通过询问模式clientserver互动。

// This is the client program
class Client(uri: String) {
  implicit val context: ActorSystem = ActorSystem("client-actor-system")
  private val mainActor = context.actorSelection(uri)

  def connect: Future[SomeClass] = {
    implicit val timeout: Timeout = Timeout(5 seconds)
    (mainActor ? Connect()).mapTo[CreationResponse]
  }
}

现在,我想为 Client class 写一些单元测试。单元测试意味着孤立地测试一个class。每个外部依赖都应该被模拟。

如何在 Client class 中模拟对 mainActor 的引用?如何在演员系统中为 mainActor 注入模拟演员?

提前致谢。

我会将 mainActor 演员选择注入客户端,并使用 Akka TestKits 创建它。

当然,您需要 ActorSelection,而不是 ActorRef。可以在这里找到一些解决方案:

Giving an ActorPath for a testProbe

或者,您可以通过向 ActorSelection.

发送 Identify 消息,使 mainActor 成为 ActorRef