Я актер, который спрашивает другой актер и будущие может откаты другим:Как проверить задать шаблон с запасным вариантом
class Subject(db: ActorRef) extends Actor with ActorLogging {
implicit val timeout = Timeout(1 seconds)
implicit val ec = context.system.dispatcher
override def preStart(): Unit = {
db ? "auth" fallbackTo Future {
"auth:timeout_error"
} pipeTo self
}
def receive: Receive = {
case msg: String => log.info(msg)
}
}
мне нужно проверить резервное поведение, но не знаю, как это сделать:
class ActorSpec extends TestKit(ActorSystem("MySpec"))
with ImplicitSender with WordSpecLike with BeforeAndAfterAll with BeforeAndAfterEach with Matchers {
val db = TestProbe()
db.ref ! PoisonPill
//db not exist anymore
val subject = system.actorOf(Props(new Subject(db.ref)))
//Something like: subject should receive "auth:timeout_error"
}
Как выполнить эту задачу должным образом?
Возможно, что вы хотите иметь, это своего рода автомат? То есть. субъект сначала в состоянии 'initializing', и как только он получает ответ от актера' db', он либо находится в 'fail', либо' running'? См. 'Context.become'. – rethab
@rethab Да, костюмы для государственных машин для этого. Но как я могу проверить, что актер становится «неудачным»? Мой вопрос более общий о практике тестирования. Типичный актерский тест выглядит следующим образом: «отправить сообщение субъекту, проверить его состояние, проверить правильный ответ». Но по моему сценарию мне нужно проверить, что субъект получает (!) Правильное сообщение. – zella
То, что я обычно делаю: либо я добавляю явные сообщения запроса, где я мог бы задать вопрос, находится ли он в состоянии 'running', или я бы послал сообщение теме, которую, как я знаю, обрабатывает, только если она находится в состоянии' running' , Если я получаю ответ, он запускается в состоянии. – rethab