У меня есть иерархия актеров, которую я хотел бы проверить на наличие сценариев ошибок - фактически протестировать прикладные стратегии супервайзеров. Мне нужно изменить метод получения актера, чтобы сообщение не подвело актера. Я нашел составной шаблон черты, но не могу заставить его работать. Мой код следует:
trait FailActor extends Actor {
abstract override def receive = LoggingReceive {
fail.orElse(super.receive)
}
def fail:Receive = {
case "fail" => throw new RuntimeException("Test")
}
}
class AddressTranslatorFailActor(storage: ActorRef) extends AddressTranslatorActor(storage) with FailActor
И в тесте, проходящем этот неудавшийся актер:
val probe = TestProbe()
val addressServiceProps = Props {
new AddressServiceActor {
override def translateAddressProps = classOf[AddressTranslatorFailActor]
}
}
где акктор AddressService определяется следующим образом:
class AddressServiceActor extends Actor with ActorLogging {
def translateAddressProps: Class[_<:AddressTranslatorActor] = classOf[AddressTranslatorActor]
...
Но по-прежнему получаю сообщение «сбой» без обработки. Любые подсказки?
Props[YourActorClass with YourBehaviorTrait]
, не складывает поведение, в то время какProps(new YourActorClass with YourBehaviorTrait)
складывает поведение в получение. - person ale64bit   schedule 13.02.2015