Akka:使用TestProbes测试监督策略

时间:2016-10-06 08:37:24

标签: scala unit-testing akka akka-testkit akka-supervision

我正在测试一个演员,它会产生并协调童工演员。为了做到这一点,我用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来检查消息。

我想知道是否有更简单的方法来实现这个目标?

0 个答案:

没有答案