2016-08-04 2 views
1

Очень важно знать, как система может себя вести, если какой-то конкретный актер терпит неудачу - как выполняется восстановление, являются снимками, полученными правильно и т. Д. Удивительно, но я не нашел любой совет по нему в the docsКак правильно проверить поведение актера в случае сбоя

Подход, который я видел в некоторых примерах, - это специальное сообщение Fail и пусть актер выбросит Exception на этом форуме.

class MyActor extends Actor { 
    override def receive = 
    ... 
    case Fail => throw new Exception("kaboom") 
} 

Я надеюсь, никогда не использовать его, как он смешивает код производства и тестирования кода, и, вероятно, генерировать некоторые разумные WTFs в ничего не подозревающих читателей.

Как я могу заставить произвольного актера потерпеть неудачу должным образом?

Спасибо

ответ

0

После некоторой мысли, я внедрил быстрое решение. Пакет тест содержит признак для проваливать, который затем смешивают в актеров для тестирования отказов:

object Failing{ 
    case object Fail 
} 

trait Failing { 
    def failOnMsg: PartialFunction[Any, Unit] = { 
    case Fail => throw new Exception("kaboom!") 
    } 
} 

затем в тесте PF предваряется оригинальной receive

val props = Props(new MyActor(arg) with Failing { 
    override def receive = failOnMsg orElse super.receive 
}) 

val actor = system.actorOf(props) 
actor ! Fail 

Это еще лучше, чем У меня было прежде, но приносил какой-то шаблон. Надеюсь, что есть лучшее решение.