我正在使用 TestKit 测试 akka 系统。我正在测试的系统的一个参与者在收到某种消息类型后,context.watch
es 发送者,并在发送者死亡时自杀:
trait Handler extends Actor {
override def receive: Receive = {
case Init => context.watch(sender)
case Terminated => context.stop(self)
}
}
在我的测试中我发送
val probe = TestProbe(system)
val target = TestActorRef(Props(classOf[Handler]))
probe.send(target, Init)
现在,为了测试手表/终止行为 - 我想模拟测试探针被杀死。
I can do
probe.send(target, Terminated)
但是,这前提是目标已经调用context.watch(sender)
,否则它不会收到终止消息。
I can do
probe.testActor ! Kill
不发送Terminated
除非目标已正确调用context.watch(sender)
,但我实际上并不希望 testprobe 被杀死,因为它需要保持响应以测试(例如)目标是否继续发送消息而不是停止自身。
我已经遇到过几次这种情况了,测试演员是否正确处理上述情况的正确方法是什么?
您可以使用单独的探针观察被测参与者的终止情况,而不是尝试通过“发送者”探针来执行此操作:
val probe = TestProbe(system)
val deathWatcher = TestProbe(system)
val target = TestActorRef(Props(classOf[Handler]))
deathWatcher.watch(target)
probe.send(target, Init)
// TODO make sure the message is processed.. perhaps ack it?
probe ! Kill
deathWatcher.expectTerminated(target)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)