首先,我不是要问如何对Akka演员进行单元测试。我知道这样做的技巧。我的问题略有不同。
我正在开发一个Scala程序,我们称之为client
,它不使用Akka Actors。但是,程序使用库,我们称之为server
,其接口是使用Akka Actor实现的。
然后,通过询问模式,client
与server
进行互动。
// 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
注入模拟演员?
提前致谢。
答案 0 :(得分:2)
我会将mainActor
actor选择注入客户端,并使用Akka TestKits创建它。
当然,您需要ActorSelection
,而不是ActorRef
。有些解决方案可以在这里找到:
Giving an ActorPath for a testProbe
或者,您可以通过向mainActor
发送ActorRef
消息,使Identify
成为ActorSelection
。