测试Akka。检查JavaTestKit探针是否收到PoisonPill消息

时间:2015-11-12 12:39:08

标签: java scala testing akka

我测试我的演员系统,我需要验证演员在某些情况下发送PoisonPill消息。我用JavaTestKit探测器模拟目标actor,并尝试检查它是否接收PoisonPill。但它不起作用:

ActorSystem system = ActorSystem.create();
JavaTestKit probe = new JavaTestKit(system);
probe.getRef().tell(PoisonPill.getInstance(), ActorRef.noSender());
Object o = probe.expectMsgClass(FiniteDuration.apply(1000, TimeUnit.MILLISECONDS), Object.class);
//here we get exception

有没有办法检查探针是否终止?

2 个答案:

答案 0 :(得分:1)

您可以通过声明与该行为相关联的行为来验证是否已收到PoisonPill - 收到毒丸的演员将自动停止。要跟踪actor终止,您可以使用probe.watch(target)然后使用probe.expectMsgClass(Terminated.class)来验证actor是否已正确终止。

答案 1 :(得分:0)

@Horusiath感谢您的回复。 因此,我必须再创建一个用于测试此类行为的探测器:

ActorSystem system = ActorSystem.create("x");
ActorRef victim = TestProbe.apply(system).ref();
TestProbe probe = TestProbe.apply(system);
probe.watch(victim);
ActorRef killer = system.actorOf(Props.create(Killer.class, victim));
killer.tell("kill!", ActorRef.noSender());
probe.expectMsgClass(Terminated.class);