演员地址和测试

时间:2013-08-30 08:15:46

标签: scala akka

我正在构建一个actor层次结构,其中一些actor会回复他们直接获得知名actor(固定名称)的消息。即这些演员(在层次结构中远远不够)通过context.actorFor("akka://...")获得actorRef。

即。例如,我有一个“精心策划”的演员:

system.actorOf(道具[OrchestratingActor],name =“orchestrator”)

然后会有akka://application/user/orchestrator

类型的地址

以及其他地方,一个随机工作人员收到一条消息并希望与协调人交谈:

class RandomWorker extends Actor {
  def theOrchestrator = context.actorFor("akka://application/user/orchestrator")
  def receive = {
    case Foo =>
      theOrchestrator ! "Bar"
  }
}

现在,我想测试那些演员并且想知道如何处理这些地址:当对演员进行单元测试时(例如使用TestActorRef),我该如何检查发送到远程地址的内容?一个想法是(在可能的情况下)通过构造函数向知名角色提供地址,并传入TestActor的地址以查看正在接收的内容。但是,我想知道是否没有办法在测试中“模仿”给定的地址,尤其是。在地址不简单的情况下。

换句话说,我想测试一下actor的行为(收到"Bar"

后,它确实会向协调器发送Foo吗?

2 个答案:

答案 0 :(得分:2)

我的建议是避免为了你展示的目的而使用演员的观察。它是一个工具,用于应用程序的设置阶段,将它们连接在一起。但即便如此,大多数演员的主管都会在不使用查找的情况下知道孩子的依赖性。

在本地actor系统中,所有ActorRef都可以从上到下注入(使用构造函数参数或引入消息)。在将远程系统相互引入时,查找最有用。

答案 1 :(得分:1)

通过构造函数注入地址没有错。如果你需要任何细节,请告诉我,因为目前我不知道如何更清楚,因为你基本上回答了你自己的问题。顺便说一句,我不知道,您使用的是哪个Akka版本,但actorFor最近被弃用而不是ActorSelection,并且有很好的理由。