Akka: тестирование стратегии контроля с TestProbes
Я тестирую актера, который порождает и координирует детей актеров. Для этого я заменил создание дочернего актера на TestProbe
s, которые используются для наблюдения и имитации обмена сообщениями.
Однако я столкнулся с проблемой при попытке проверить стратегию надзора актера. Я смог смоделировать исключение, сгенерированное в дочернем акторе, настроив AutoPilot
на TestProbe
, Но оказалось, что TestProbe
По умолчанию система контролируется системным опекуном, и мой тестовый актер не получает уведомлений об ошибках.
Одна идея, которая пришла в голову, заключается в создании промежуточного 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.
Интересно, есть ли более простой способ сделать это?