Akka: стратегия контроля тестирования с помощью тестовых заданий

#scala #unit-testing #akka #akka-testkit #akka-supervision

#scala #модульное тестирование #akka #akka-testkit #akka-надзор

Вопрос:

Я тестирую актер, который порождает и координирует дочерних рабочих актеров. Для этого я заменил создание дочернего субъекта на TestProbe s, которые используются для наблюдения и имитации обмененных сообщений.

Однако я столкнулся с проблемой при попытке протестировать стратегию контроля актера. Я смог смоделировать исключение, сгенерированное внутри дочернего субъекта, установив AutoPilot на a TestProbe . Но оказалось, что TestProbe по умолчанию s контролируются system guardian, и мой участник тестирования не получает уведомлений об ошибках.

Одна идея, которая пришла в голову, состоит в том, чтобы настроить промежуточный 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
  }
}
  

Таким образом, субъект будет контролироваться должным образом, но сообщения все равно могут быть проверены с TestProbe помощью s.

Интересно, есть ли более простой способ добиться этого?