Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用Akka Actor的单元测试组件_Scala_Unit Testing_Akka_Akka Testkit - Fatal编程技术网

Scala 使用Akka Actor的单元测试组件

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演员进行单元测试。我知道这样做的技巧。我的问题略有不同

我正在开发一个Scala程序,我们称之为
客户端
,它不使用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