2017-09-29 9 views
0

우선, 나는 Akka 액터의 단위 테스트 방법을 묻지 않을 것입니다. 나는 그 기술을 알고 있습니다. 내 문제는 약간 다릅니다.단위 테스트 Akka 액터를 사용하는 구성 요소

저는 Scala 프로그램을 개발 중입니다.이 프로그램은 Akka 액터를 사용하지 않고 client이라고 부릅니다. 그러나이 프로그램은 라이브러리를 사용하므로이 인터페이스를 Akka Actor를 사용하여 구현 한 server이라고합시다.

문의 패턴을 통해 clientserver과 상호 작용합니다.

// This is the client program 
class Client(uri: String) { 
    implicit val context: ActorSystem = ActorSystem("client-actor-system") 
    private val mainActor = context.actorSelection(uri) 

    def connect: Future[SomeClass] = { 
    implicit val timeout: Timeout = Timeout(5 seconds) 
    (mainActor ? Connect()).mapTo[CreationResponse] 
    } 
} 

이제 Client 클래스의 단위 테스트를 기록해 두겠습니다. 단위 테스트는 클래스를 독립적으로 테스트하는 것을 의미합니다. 모든 외부 의존성을 조롱해야합니다.

클래스의 mainActor에 대한 참조를 모의 할 수 있습니까? 액터 시스템에 mainActor의 모의 액터를 삽입하려면 어떻게해야합니까?

미리 감사드립니다.

답변

2

mainActor 액터 선택을 클라이언트에 삽입하고 Akka TestKits를 사용하여 액터 선택을 만듭니다.

물론 ActorSelection이어야하며 ActorRef이 아닙니다.

Giving an ActorPath for a testProbe

또는 양자 택일로, 당신은 ActorSelectionIdentify 메시지를 전송하여 ActorRefmainActor을 만들 수 : 그것에 대해 몇 가지 솔루션을 여기에서 찾을 수 있습니다.

+0

귀하의 접근 방식이 옳고 하나만 있다고 가정합니다. 내가 좋아하지 않는 유일한 점은 Akka의 사용이 더 이상 '클라이언트'클래스에 숨겨져 있지 않다는 것입니다. –

+0

대안은 액터를 빌드하는 팩토리 메소드를 생성하는 것이며, 테스트에서 그것을 대체하여'probe.ref'를 리턴합니다. –

관련 문제