我正在构建一个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
吗?
答案 0 :(得分:2)
我的建议是避免为了你展示的目的而使用演员的观察。它是一个工具,用于应用程序的设置阶段,将它们连接在一起。但即便如此,大多数演员的主管都会在不使用查找的情况下知道孩子的依赖性。
在本地actor系统中,所有ActorRef都可以从上到下注入(使用构造函数参数或引入消息)。在将远程系统相互引入时,查找最有用。
答案 1 :(得分:1)
通过构造函数注入地址没有错。如果你需要任何细节,请告诉我,因为目前我不知道如何更清楚,因为你基本上回答了你自己的问题。顺便说一句,我不知道,您使用的是哪个Akka版本,但actorFor
最近被弃用而不是ActorSelection
,并且有很好的理由。