Akka: тестирование стратегии контроля с TestProbes

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

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

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

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

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

0 ответов

Другие вопросы по тегам