簡體   English   中英

測試傳出的Akka Actor消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM