我正在用TestKit测试一个akka系统。我正在测试的系统的一个参与者,在接收到特定的消息类型时,context.watch会将发送方关闭,并在发送方死亡时杀死自己:
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)现在,为了测试手表/终止的行为-我想模拟测试探针被杀死。
我能做到
probe.send(target, Terminated)但是,这预先假定目标已经调用了context.watch(sender),否则它将不会接收终止。
我能做到
probe.testActor ! Killwith不发送Terminated,除非target正确地调用了context.watch(sender),但我实际上不希望testprobe被杀死,因为它需要保持响应以测试是否(例如)目标继续发送消息而不是停止自身。
我现在遇到过几次这种情况,有什么正确的方法来测试一个演员是否正确地处理了上述情况?
发布于 2016-02-17 08:51:18
您可以通过一个单独的探测来观看被测试的演员终止,而不是试图通过“发送方”探测来完成这个任务:
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)https://stackoverflow.com/questions/23946826
复制相似问题