2013-08-30 59 views
0

我建立了演员层次结构,其中一些演员回复他们直接向着名演员(固定名称)发送的消息。即这些演员(在层次结构中远离)通过context.actorFor("akka://...")获得演员参考。演员地址和测试

I.e.例如,我有一个 “编排” 演员:

system.actorOf(道具[OrchestratingActor],名称= “协调器”)

然后将有那种akka://application/user/orchestrator

和某处的地址否则,收到的消息和随机工人想告诉协调器:

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

现在,我想测试这些演员,我想知道如何对付这些地址:当单元测试的演员(例如使用TestAc torRef),我该如何去检查发送到远程地址的内容?一个想法是(如果可能)通过构造函数向知名演员提供地址,并传递TestActor的地址以查看接收到的内容。但是,我想知道在测试中是否没有办法“冒充”给定的地址,特别是,在地址不简单的情况下。

换句话说,我想考演员的行为(将它的确在收到发送到"Bar"在Orchestrator一个Foo

+0

我很抱歉,但我根本不理解这个问题。你能列出你有什么和你想要的吗? – Jatin

+0

确实,这有点蓬松,我希望现在更清楚 –

回答

2

我的建议是避免使用l为了您展示的目的,演员们可以出演。将它连接在一起时,它相当于您的应用程序设置阶段的工具。但即使如此,即使大多数演员的导演也会在不使用查询的情况下了解他们孩子的依赖关系。

在本地actor系统中,所有ActorRefs都可以从上到下注入(使用构造函数参数或引言消息)。在引入远程系统时,查找是非常有用的。

1

没有什么不妥通过构造注射的地址,让它我知道你是否需要任何细节,因为目前我不知道如何使这个更清楚,因为你基本上回答了你自己的问题。顺便说一下,我不知道你正在使用哪种Akka版本,但是actorFor最近已被弃用,赞成ActorSelection,这是有很好的理由。