2014-05-11 3 views
1

저는 Akka와 액터 모델을 처음 접했고 배우를 테스트하는 동안 어려움을 겪고 있습니다.액터가 특정 메시지를 수신했는지 테스트합니다.

Akka documentation에서 로컬 포트에 자신을 경계하고 다음 코드로 들어오는 연결을 청취하는 간단한 배우를 만들 수 있습니다

class Server extends Actor { 

    import Tcp._ 
    import context.system 

    IO(Tcp) ! Bind(self, new InetSocketAddress("localhost", 12345)) 

    def receive = { 
    case b @ Bound(localAddress) => 
     // do some logging or setup ... 

    // rest omitted for brevity 
    } 

} 

나는 Server 배우를 작성하는 테스트를 작성하고 싶습니다 액터가 IO(Tcp)에서 Bound 메시지를 수신했는지 확인합니다. 나는 이것이 가능하다고 생각하지만 나는 뭔가를 놓치고 있다고 생각한다. expectMsg에 대한 나의 이해는 테스트중인 액터에게 메시지를 보내는 액터에 적용되어 무언가를 수신하고받은 액티비티에 대해 주장합니다. 실제로 내가 만든 배우가받은 것을 확인할 수 있습니까?

답변

0

이 테스트는 Akka IO가 작동하는지/API를 올바르게 사용하고 있는지 테스트하고 방정식에서 액터를 제거하고 대신 TestProbe를 사용할 수 있습니다.

설정/등록 로직을 액터 인스턴스를 생성하는 것과 분리하는 것이 좋습니다. 이 방법 당신은 할 수 시험 :

당신의 설정 코드는 당신이가 제대로 동작하는지 당신의 배우 IO가에 보내 확인하는 것과 같은 메시지를 보내기 바운드 메시지
  • 를 얻을 수 있음을 확인하는 TestProbe를 사용하여 올바른
  • 관련 문제