2017-10-26 4 views
0

첫 번째 Akka 테스트를 작성하고 문서를 검토하려고합니다. 나는 그것의 첫 번째 example을 실행하고 다음과 같은 오류 얻고 있었다 :Akka 테스트 TCP 명령이 실패했습니다.

override def receive: Receive = { 
case p: ProducerRecord[_,_] => 
     sendChannel.send(p.value()) 
case _ => logger.error("Unknown type Producer Record Received.") 
} 

Testspec : I가 원하는

val uutActor =system.actorOf(IngestionWorkerActor.props(config, KafkaProducer)) 
"An actor must send " should { 
"send back messages unchanged" in { 
    uutActor ! expected 
    Thread.sleep(50) 
    expectMsg(expected) 
} 
} 

다음

[ERROR] [10/26/2017 14:08:55.371] [IngestionWorkerActorSpec-akka.actor.default-dispatcher-4] [akka://IngestionWorkerActorSpec/user/$b] Assertion failed: timeout (3 seconds) during expectMsg while waiting for Test message java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for Test message

내 테스트 배우의 수신 방법을 내 배우가 보낸 메시지를 받았는지 여부를 테스트하고 나중에 특정 메시지를 받았는지 여부를 확인하기 위해 수정하려고합니다. 어떤 도움을 주셔서 감사합니다.

답변

1

expectMsg(something)는 배우 something (메시지를 보낼 때 !에 암시 적 매개 변수에 의해 캡처 된) sender()에, 그것은 배우가받는 메시지를 성찰하지 않는 회신 것을 의미합니다.

액터의 내부를 조사하는 테스트를 쓰지 말고 메시지가 전송 될 때 행동해야하는지 확인하는 것이 가장 좋습니다. 이 경우 모의도를 sendChannel에 넣고 올바른 값이 전송되었는지 확인하는 것이 좋습니다.