我测试我的演员系统,我需要验证演员在某些情况下发送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
有没有办法检查探针是否终止?
答案 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);