새 메시지 Actor
이 예상치 못한 메시지를 처리하는 방법을 테스트하고 있습니다. 이 경우에는 GibberishException
을 던집니다. 다음은 테스트 지금까지 구현의 :Akka 관리자로부터 예외 세부 정보를 얻으려면 어떻게해야합니까?
테스트 :
"""throw a GibberishException for unrecognized messages""" in {
//define a service that creates gibberish-speaking repositories
val stubs = new svcStub(
actorOf(new Actor{
def receive = { case _ => {
self.channel ! "you're savage with the cabbage"
}
}
})
)
val model = actorOf(new HomeModel(stubs.svc,stubs.store))
val supervisor = Supervisor(
SupervisorConfig(
OneForOneStrategy(List(classOf[Exception]), 3, 1000),
Supervise(model,Permanent) :: Nil
)
)
try{
intercept[GibberishException] {
supervisor.start
model !! "plan"
}
} finally {
supervisor.shutdown
}
stubs.store.plan should equal (null)
stubs.svcIsOpen should be (false)
}
구현 : 나는 테스트를 실행할 때
class HomeModel(service: PlanService, store: HomeStore)
extends Actor {
private val loaderRepo = service.getRepo()
private var view: Channel[Any] = null
override def postStop() = {
service.close()
}
def receive = {
case "plan" => {
view=self.channel
loaderRepo ! LoadRequest()
}
case p: Plan => {
store.plan=p
view ! store.plan
}
case _ => throw new GibberishException(_)
}
}
그러나, 예외 사항, 나는 설립 Supervisor
에 도착하지만, 나는 그들과 함께 무엇을 할 것인지 (그것들을 기록하거나 그들의 유형을 시험하는 것과 같이) 어떻게해야할지 모른다. 나는 감독관에게서 예외적 인 세부 사항을 얻을 수 있기를 원한다. 그래서 나는 시험에서 그들을 다시 가로 채고 가로 챌 수있다. 테스트 메소드 밖에서, 실행중인 앱의 UI에서 예외의 성격을보고 싶다면이 기능이 유용하다고 상상해 볼 수 있습니다. 그것이 발생하면 Supervisor
에서 이것을 얻을 수있는 방법이 있습니까?
하지만 관리자에게 예외를 기록하거나 달리 행동을 취하는 방법은 무엇입니까? 거기에 오류 처리 코드를 추가 할 수있는 고리가 어디에 있는지 알지 못합니다. 배우가 다시 시작된다는 것을 이해합니다. 그러나 예외를 기록하거나 사용자에게 메시지를 표시하는 것보다 더 많은 것을하고 싶다면 어떻게해야합니까? – traffichazard
예외가 이미 Akka에 의해 기록됩니다. 사용자에게 메시지를 보내려면 !!! 대신에 ! 그리고 당신은 미래에 예외를 가질 것입니다. –
GibberishException 만 처리하고 !! 테스트와 함께'intercept' 블록에 !!! 그 다음에 'get'을하면 그 결과는 나에게 똑같은 결과를 준다. 'GibberishException'은 잡히지 않고 내 커맨드 라인으로 덤핑되고, ScalaTest는'Expected exception org.thimblus.model.GibberishException이 던져 지지만 akka.dispatch.FutureTimeoutException이 던져졌습니다. '라는 테스트에서 실패합니다. 예외가있는 것처럼 보입니다. 테스트가 기다리는 스레드와는 다른 스레드에 던져진다. – traffichazard