Scala 使用Akka Actor的单元测试组件
首先,我不是在问如何对Akka演员进行单元测试。我知道这样做的技巧。我的问题略有不同 我正在开发一个Scala程序,我们称之为Scala 使用Akka Actor的单元测试组件,scala,unit-testing,akka,akka-testkit,Scala,Unit Testing,Akka,Akka Testkit,首先,我不是在问如何对Akka演员进行单元测试。我知道这样做的技巧。我的问题略有不同 我正在开发一个Scala程序,我们称之为客户端,它不使用Akka角色。但是,该程序使用一个库,我们称之为服务器,它的接口是使用Akka Actor实现的 然后,通过ask模式,客户端与服务器交互 // This is the client program class Client(uri: String) { implicit val context: ActorSystem = ActorSystem("
客户端
,它不使用Akka角色。但是,该程序使用一个库,我们称之为服务器
,它的接口是使用Akka Actor实现的
然后,通过ask模式,客户端
与服务器
交互
// 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
类写一些单元测试。单元测试是指单独测试一个类。每个外部依赖都应该被嘲笑
如何在Client
类中模拟对mainActor
的引用?如何在actor系统中为mainacactor
注入模拟actor
提前感谢。我会将
mainacactor
actor选择注入客户端,并使用Akka测试工具包创建它
当然,您需要的是ActorSelection
,而不是ActorRef
。以下是一些解决方案:
或者,您也可以通过向
ActorSelection发送Identify
消息,使mainActor
成为ActorRef
,我认为您的方法是正确的,也是唯一的方法。我唯一不喜欢的是Akka的使用不再隐藏在客户机
类中。另一种方法是创建一个工厂方法来构建actor,在测试中覆盖它以返回probe.ref