4

このようなアクターがいるとしましょう(Scala2.10でAkka2.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
}

したがって、クライアントがConnectメッセージを受信すると、それをConfigurationManagerに送信し、別の状態になります。それは問題ありませんが、今はこれをテストしたいと思います。

val clientRef = TestActorRef(new ClientActor).
clientRef ! new Connect
// ??

別のアクターに送信されるため、ここではMsg()などを期待できません。このような状況に対処するためのベストプラクティスは何ですか?メッセージが確実に送信されるようにしたいのですが、その方法がわかりません。

ありがとう、マイケル

4

3 に答える 3

2

依存関係をコンストラクターパラメーターとして渡します。

通常のコード:

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")
于 2013-01-16T03:30:05.957 に答える
0

おそらく、Akka内のメッセージ送信メカニズムが宣伝どおりに機能することを信頼する必要があります。本当にこれを信頼できない場合は、Akkaソースコードをダウンロードして、ユースケースをカバーする独自の単体テストを追加するか、独自の単体テストのニーズをサポートするようにコードを変更するのが最善の解決策です。

または、Camelのようなものを使用して、すべてのメッセージ送信を実行し、その方法でメッセージを傍受することができます。

于 2013-01-15T15:59:39.363 に答える
0

コラボレーションアクターの作成を抽象化すると、必要なことを実行するテストアクターを注入できます。この状況は、通常のオブジェクト間のコラボレーションのテストと非常によく似ています。

于 2013-01-15T16:30:34.287 に答える