[英]Testing Outgoing Akka Actor Messages
假設我有一個這樣的演員(在Scala 2.10中使用Akka 2.1):
class ClientActor extends Actor with ActorLogging {
val configurationManager = context.actorOf(Props[ConfigurationManager], "ConfigurationManager")
def disconnected: Receive = {
case msg: Connect =>
configurationManager ! msg
context.become(connecting)
}
..
def recieve = disconnected
}
因此,現在客戶端收到連接消息時,它將其發送到ConfigurationManager並進入另一種狀態。 很好,但是現在我要測試一下。
val clientRef = TestActorRef(new ClientActor).
clientRef ! new Connect
// ??
我不能在這里期望Msg()左右,因為它將被發送到其他角色。 處理這種情況的最佳實踐是什么? 我只想確保郵件已發送,但我不知道該怎么做。
謝謝邁克爾
將依賴項作為構造函數參數傳遞:
普通代碼:
val configActor =
system.actorOf(Props[ConfigurationManager], "configManager")
val clientActor =
system.actorOf(Props(new ClientActor(configActor)), "clientActor")
測試代碼:
val clientActor =
system.actorOf(Props(new ClientActor(testActor)), "clientActor")
也許您應該只相信Akka內部的消息發送機制能夠像宣傳的那樣工作。 如果您真的不敢相信這一點,那么最好的解決方案是下載Akka源代碼,然后添加自己的單元測試以涵蓋您的用例,或者修改代碼以支持自己的單元測試需求。
或者,您可以使用諸如Camel之類的方式來執行所有消息發送和攔截消息。
如果您抽象出協作角色的創建,則可以注入一個可以執行所需操作的測試角色。 這種情況與測試普通對象之間的協作非常相似。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.