单元测试使用Akka Actor的组件

时间:2017-09-29 06:09:48

标签: scala unit-testing akka akka-testkit

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

我正在开发一个Scala程序,我们称之为client,它不使用Akka Actors。但是,程序使用库,我们称之为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类的一些单元测试。单元测试意味着单独测试一个类。每个外部依赖都应该被嘲笑。

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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

Giving an ActorPath for a testProbe

或者,您可以通过向mainActor发送ActorRef消息,使Identify成为ActorSelection