我正在使用 JavaTestKit 编写 Akka JUnit 测试,并试图找出我做错了什么。
我有一个 AkkaSystem,用于创建收件箱对象并向 ExecutiveSupervisor 发送消息。
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 类中,并且当我在调试时查看它时正确接收。
执行非常愉快地通过actor中的代码。在工作人员的某个点上,我希望它在 ActorSystem 级别的测试中将其传递的相同对象(ResultAndData)返回到 JUnit 的收件箱。即,我希望工人将其传递的同一对象返回给其父级。
但是,正如它试图返回以下行一样:
log.info("SUCCESS!!!!!!!!!!!");
getContext().parent().tell(result, getSelf()); //FAILS HERE
此时我收到此消息:
[信息] [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 对象,它总是会超时,因为消息没有通过。
谢谢大家,任何帮助都会很棒。