我正在测试一个演员,它会产生并协调童工演员。为了做到这一点,我用TestProbe
代替了儿童演员创作,用于观察和模拟交换的消息。
然而,当我试图测试演员的监督策略时,我遇到了一个问题。通过在AutoPilot
上设置TestProbe
,我能够模拟子actor中生成的异常。但事实证明,TestProbe
默认由系统监护人监督,我的测试演员不会收到错误通知。
想到的一个想法是设置一个中间ForwarderActor
层,该层将由测试actor监督并生成测试异常,但在TestProbe
和测试actor之间转发消息,就像这样:
case class GenerateException(exception: Exception)
class ForwarderActor(phase: Phase) extends Actor {
val probe = TestProbe(phase.toString)
override def receive: Receive = {
case GenerateException(e) => throw e
case msg if sender() == probe.ref => context.parent ! msg
case msg => probe.ref ! msg
}
}
这样演员可以正确监督,但仍然可以使用TestProbe
来检查消息。
我想知道是否有更简单的方法来实现这个目标?