我正在测试一个生成和协调童工演员的演员。为了做到这一点,我用TestProbe
s 替换了子 actor 创建,它用于观察和模拟交换的消息。
但是,我在尝试测试演员的监督策略时遇到了问题。我能够通过AutoPilot
在TestProbe
. 但事实证明,TestProbe
s 默认由系统监护人监督,我的测试参与者没有收到错误通知。
想到的一个想法是设置一个中间ForwarderActor
s 层,该层将由测试参与者监督并生成测试异常,但否则会在TestProbe
测试参与者之间转发消息,如下所示:
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
}
}
这样,actor 将得到适当的监督,但仍然可以使用TestProbe
s 检查消息。
我想知道是否有更简单的方法可以做到这一点?