AkkaTyped Тестовый случай не удалось проверить утверждение: время ожидания (3 секунды) - PullRequest
0 голосов
/ 20 сентября 2018

В моем проекте я пишу тест-кейс для актера с типом scala akka, который взаимодействует с ZeroMQ для передачи сообщений, но при написании тестового кейса я сталкиваюсь с проблемами, из-за которых система выдает ошибку подтверждения ошибки, ожидаемое время ожидания сообщения (3 секунды).Актер, которому я пишу тест, выглядит следующим образом:

object FollowCmdActor {
  def create(cmanager: CManager,
             zeroMQProtoActor: ActorRef[ZeroMQMessage],
             loggerFactory: LoggerFactory): Behavior[ImmediateCommand] =
    Behaviors.setup(ctx => FCmdActor(ctx, cmanager, zeroMQProtoActor, loggerFactory))
}
case class FCmdActor(ctx: ActorContext[ImmediateCommand],
                          cmanager: CManager,
                          zeroMQProtoActor: ActorRef[ZeroMQMessage],
                          loggerFactory: LoggerFactory)
    extends MutableBehavior[ImmediateCommand] {
  private val log: Logger = loggerFactory.getLogger
  override def onMessage(msg: ImmediateCommand): Behavior[ImmediateCommand] = {
    implicit val duration: Timeout = 20 seconds
    implicit val scheduler         = ctx.system.scheduler
    val response: ZeroMQMessage = Await.result(zeroMQProtoActor ? { ref: ActorRef[ZeroMQMessage] =>
      ZeroMQMessage.SubmitCommand(ref, msg.controlCommand)
    }, 10.seconds)
    response match {
      case x: ZeroMQMessage.MCSResponse => {
          msg.sender ! ImmediateCommandResponse(x.commandResponse)
      }
    }
    Behavior.stopped
  }

}

Мой тестовый пример выглядит следующим образом:

class FCmdActorTest extends FunSuite with Matchers with BeforeAndAfterAll   {
  implicit val untypedSystem: ActorSystem       = ActorSystemFactory.remote()
  implicit val system: typed.ActorSystem[_]     = untypedSystem.toTyped
  implicit val testKitSettings: TestKitSettings = TestKitSettings(system)
  private val mocks = new FCmdMocks()
  private val loggerFactory = mocks.loggerFactory
  private val log = mocks.log

 test("Test for correct response from ZeroMQ actor"){

   val prefix = Prefix("abc")
   val setup = Setup(prefix, CommandName("FCmd"), None)
   //val zeroMQActor  = TestProbe[ZeroMQMessage]()
   val inbox = TestInbox[ZeroMQMessage]()
   val submitCommand = SubmitCommand(inbox.ref, setup)
   //Test1 : ZeroMQ Actor should receive submitCommand message
   //zeroMQActor.expectMessage(submitCommand)
   val commandHandlerActor = TestProbe[HCommandMessage]()

   val immediateCommand : ImmediateCommand = ImmediateCommand(commandHandlerActor.ref,setup)
   val behaviorTestKit: BehaviorTestKit[ImmediateCommand] =   BehaviorTestKit(FCmdActor.create(mocks.cManager, inbox.ref, mocks.loggerFactory))
   behaviorTestKit.run(immediateCommand)

   inbox.expectMessage(submitCommand)
 }
  when(loggerFactory.getLogger).thenReturn(log)
  when(loggerFactory.getLogger(any[actor.ActorContext])).thenReturn(log)
  when(loggerFactory.getLogger(any[ActorContext[_]])).thenReturn(log)
}

Но при тестировании я сталкиваюсь с ошибкой ниже: сбой ssertion:Тайм-аут (3 секунды) во время ожидаемого сообщения при ожидании SubmitCommand (Актер [akka: // cw-remote-actor-system / system / testProbe-1 # -1150646793], Настройка (runId = Id (46f52c9f-1c03-4e45-bd4c-)387e8f797bec), paramSet = Set (), source = Prefix (tmt.tcs.asdAssembly-Client), commandName = CommandName (Fcmd), MaybeObsId = None)) java.lang.AssertionError: сбой утверждения: тайм-аут (3 секунды) во время ожидаемого сообщенияво время ожидания SubmitCommand (Actor [akka: // cw-remote-actor-system / system / testProbe-1 # -1150646793], Setup (runId = Id (46f52c9f-1c03-4e45-bd4c-387e8f797bec), paramSet = Set (), source = Prefix (tmt.tcs.asdAssembly-Client), commandName = CommandName (Fcmd), MaybeObsId = Нет))

...