2013-08-30 88 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,這是有很好的理由。