使用 Akka Actor 的单元测试组件
Unit Testing Components that Uses an Akka Actor
首先,我不是在问如何对 Akka Actor 进行单元测试。我知道这样做的技巧。我的问题略有不同。
我正在开发一个不使用 Akka Actors 的 Scala 程序,我们称之为 client
。但是,该程序使用了一个库,我们称之为 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
class 写一些单元测试。单元测试意味着孤立地测试一个class。每个外部依赖都应该被模拟。
如何在 Client
class 中模拟对 mainActor
的引用?如何在演员系统中为 mainActor
注入模拟演员?
提前致谢。
我会将 mainActor
演员选择注入客户端,并使用 Akka TestKits 创建它。
当然,您需要 ActorSelection
,而不是 ActorRef
。可以在这里找到一些解决方案:
Giving an ActorPath for a testProbe
或者,您可以通过向 ActorSelection
.
发送 Identify
消息,使 mainActor
成为 ActorRef
首先,我不是在问如何对 Akka Actor 进行单元测试。我知道这样做的技巧。我的问题略有不同。
我正在开发一个不使用 Akka Actors 的 Scala 程序,我们称之为 client
。但是,该程序使用了一个库,我们称之为 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
class 写一些单元测试。单元测试意味着孤立地测试一个class。每个外部依赖都应该被模拟。
如何在 Client
class 中模拟对 mainActor
的引用?如何在演员系统中为 mainActor
注入模拟演员?
提前致谢。
我会将 mainActor
演员选择注入客户端,并使用 Akka TestKits 创建它。
当然,您需要 ActorSelection
,而不是 ActorRef
。可以在这里找到一些解决方案:
Giving an ActorPath for a testProbe
或者,您可以通过向 ActorSelection
.
Identify
消息,使 mainActor
成为 ActorRef