如何测试Akka演员是在Scala创建的
发布时间:2020-12-16 21:30:52 所属栏目:安全 来源:网络整理
导读:我试图写一个测试,将验证我的下面的演员是创建一个heartBeatExpireWorker和一个heartBeatAcceptpter,但我不知道如何做到这一点. 首先我想我可以使用Mockhito模拟或间谍代替上下文,然后验证我调用了actorOf,但是我无法弄清楚注入上下文的方法,而不会破坏Akka
我试图写一个测试,将验证我的下面的演员是创建一个heartBeatExpireWorker和一个heartBeatAcceptpter,但我不知道如何做到这一点.
首先我想我可以使用Mockhito模拟或间谍代替上下文,然后验证我调用了actorOf,但是我无法弄清楚注入上下文的方法,而不会破坏Akka测试框架. 然后,我想我可以向工作人员发送一个Identify消息来验证它们是否存在.但是在我看来,这样做是不行的,因为Akka TestKit似乎并没有产生被测试的演员的小孩演员.它只能接受可以支持邻近演员的Testprobe. class HeartBeatPumpWorker(chatService: ChatService,target: HeartBeatMessageCmd) extends Actor with ActorLogging with WorkersReference { val heartBeatInterval = chatService.getHeartBeatInterval val tick = context.system.scheduler.schedule(0 millis,heartBeatInterval millis,self,SendHeartBeat(target)) override def postStop() = tick.cancel() def receive = { case SendHeartBeat(command: HeartBeatMessageCmd) => log.debug("Sending heartbeat") //Send heartbeat to GWT val userTarget = NetworkWorker.buildEventUserTarget(command.getEventCode,command.getUser) val uuid: String = UUID.randomUUID().toString val freshCommand = new HeartBeatMessageCmd(command.getUser,command.getEventCode,uuid,command.getUserSession) networkWorker ! NetworkBroadcast(userTarget,freshCommand) val heartBeatId: String = freshCommand.getUuid //create expirer val heartBeatExpireWorkerRef = context.actorOf(HeartBeatExpireWorker.props(chatService,freshCommand),HeartBeatExpireWorker.name(heartBeatId)) val heartBeatAccepterRef = context .actorOf(HeartBeatAcceptWorker.props(chatService,HeartBeatAcceptWorker.name(heartBeatId)) //record heartbeat chatService.saveSentHeartbeat(heartBeatId,freshCommand.getUserSession,freshCommand.getEventCode,freshCommand.getUser,freshCommand.getTimeCmdGenerated) case _ => log.error("Pumper received unknown message. This shouldn't happen " + sender.path.toString) self ! PoisonPill } } object HeartBeatPumpWorker { def name(eventCode: String,user: String,sessionId: String) = f"HeartBeatPumpWorker-$eventCode-$user-$sessionId" def path(eventCode: String,sessionId: String) : String = { EventWorker.Path + "/" + name(eventCode,user,sessionId) } def props(chatService: ChatService,heartBeatMsgCmd: HeartBeatMessageCmd) = { Props(classOf[HeartBeatPumpWorker],chatService,heartBeatMsgCmd) } } 解决方法
在父HeartBeatPumpWorker的构造函数中为孩子注入Props(例如HeartBeatAcceptWorker.props).从测试中通过你想要的任何道具.让父母通过提供的道具实例化孩子.与孩子交往.最后一部分取决于你的数据流.例如,如果父母屏蔽孩子,但是将消息委托给他们,则将消息发送给父母.如果孩子彼此交谈使用测试探针或类似的东西.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |