2016-08-04 5 views
1

특정 액터가 실패한 경우 시스템이 어떻게 작동 할지를 아는 것은 매우 중요합니다. 복구 실행 방법, 스냅 샷을 올바르게 가져 오는 방법 등입니다. 놀랍지 만, 나는 찾지 못했습니다. the docs실패시 액터 동작을 올바르게 테스트하는 방법

내가 몇 가지 예에서 본 접근 방법에서 거기에 어떤 조언은 특별한 Fail MSG를 가지고 배우가이 MSG상의 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 

앞에 추가됩니다 무엇을 나는 전에 가지고 있었지만, 약간의 상용구를 가져왔다. 더 나은 해결책이 있기를 바랍니다.