1

JavaTestKit を使用して Akka JUnit テストを作成していますが、何が間違っているのかを理解しようとしています。

Inbox オブジェクトを作成し、ExecutiveSupervisor にメッセージを送信するために使用する AkkaSystem があります。

ActorSystem akkaSystem = ActorSystem.create("myAkkaSystem");

Props executiveProps = Props.create(ExecutiveSupervisor.class);
TestActorRef<ExecutiveSupervisor> executiveSupervisorTestActorRef = TestActorRef.create(akkaSystem, executiveProps, "testExecutiveSupervisor");

new JavaTestKit(akkaSystem) {{

    final Inbox inbox = Inbox.create(akkaSystem);
    inbox.send(executiveSupervisorTestActorRef, new Object());
    ResultAndData result = (Object)inbox.receive(Duration.create(2, TimeUnit.SECONDS));

 }};

ResultAndData オブジェクトは、UnTypedActor である ExecutiveSupervisor クラスに渡され、デバッグ中にこれを見ると正しく受信されます。

実行は、アクター内のコードを非常にうまく処理します。ワーカーのある時点で、渡されたのと同じオブジェクト (ResultAndData) を、ActorSystem レベルでのテストで JUnit の受信ボックスに返すことを期待しています。つまり、ワーカーが渡されたのと同じオブジェクトを親に返すようにしたいのです。

しかし、次の行で返そうとするのと同じように:

log.info("SUCCESS!!!!!!!!!!!");
getContext().parent().tell(result, getSelf());  //FAILS HERE

その時点で、次のメッセージが表示されます。

[INFO] [09/30/2013 19:22:38.609] [default-akka.actor.default-dispatcher-4] [akka://default/user] メッセージ [com.netaporter.modules.serviceagent.remoteservices.ResultAndData ] TestActor[akka://default/user/testExecutiveSupervisor] から Actor[akka://default/user] へ配信されませんでした。[1] デッドレターが発生しました。このロギングは、構成設定 'akka.log-dead-letters' および 'akka.log-dead-letters-during-shutdown' でオフにするか、調整することができます。

基本的に、メッセージは私が何をしたいのかを正確に説明していますが、そうではありません。testExecutiveSupervisor からその親であるデフォルト/ユーザーに返される ResultAndData オブジェクトが必要です。

JUnit に次の行を追加すると、次のようになります。

expectMsgEquals(duration("2 seconds"), result);

「結果」が私の ResultAndData オブジェクトであるため、メッセージが通過しないため、常にタイムアウトします。

ありがとう、どんな助けでも素晴らしいでしょう。

4

1 に答える 1

2

次のようなメッセージを返す必要があります。

sender().tell(result, getSelf());

現在、アクターの親にメッセージを送信していますが、アクターはトップレベルのアクターであるため、これは成功しません。アクターの親は受信トレイではないため、試みていることは成功しません。親は、そのコンテキストで子を作成するアクターです。actorSystem で TestActorRef を介してアクターを作成すると、親としてデフォルト/ユーザー アクターを持つ最上位のアクターになり、メッセージの受信には使用できません。あなたが本当に望んでいるのはメッセージに返信することだと思うので、現在のメッセージの送信者にメッセージを送信する必要がありますsender()

于 2013-10-01T10:17:21.450 に答える