【发布时间】:2014-05-30 04:02:59
【问题描述】:
我正在使用 TestKit 测试一个 akka 系统。我正在测试的系统的一个参与者,在收到某种消息类型时,context.watches 发送者,并在发送者死亡时杀死自己:
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)
现在,要测试 watch / Terminated 行为 - 我想模拟被杀死的 testprobe。
我可以的
probe.send(target, Terminated)
但是,这假定目标调用了 context.watch(sender) ,否则它不会收到 Terminated。
我可以的
probe.testActor ! Kill
with 不会发送 Terminated 除非目标已正确调用 context.watch(sender) ,但我实际上并不希望测试探针被杀死,因为它需要保持响应以测试(例如)目标是否继续发送消息停止自己。
我现在遇到过几次,测试演员是否正确处理上述情况的正确方法是什么?
【问题讨论】:
标签: akka