Tôi đang cố gắng để viết một bài kiểm tra đó sẽ xác minh rằng nam diễn viên của tôi dưới đây đang tạo ra một heartBeatExpireWorker và heartBeatAccepter, nhưng tôi không có ý tưởng làm thế nào để làm điều đó. Đầu tiên tôi đã nghĩ tôi có thể sử dụng Mockhito giả hoặc gián điệp thay cho bối cảnh và sau đó xác minh rằng tôi gọi là actorOf, nhưng tôi không thể tìm ra cách để chèn ngữ cảnh mà không phá vỡ khuôn khổ thử nghiệm Akka.Làm thế nào để kiểm tra rằng diễn viên Akka đã được tạo ra trong Scala
Sau đó, tôi đã suy nghĩ rằng tôi có thể gửi một thông điệp tới Xác định người lao động để xác minh rằng chúng tồn tại. Nhưng nó đã xảy ra với tôi rằng điều đó sẽ không làm việc, hoặc bởi vì Akka TestKit dường như không tạo ra các diễn viên trẻ em của một diễn viên được thử nghiệm. Nó chỉ có thể thực hiện trong các thử nghiệm có thể đứng trong các diễn viên lân cận.
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, freshCommand), 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, user: String, sessionId: String) : String = {
EventWorker.Path + "/" + name(eventCode, user, sessionId)
}
def props(chatService: ChatService, heartBeatMsgCmd: HeartBeatMessageCmd) = {
Props(classOf[HeartBeatPumpWorker], chatService, heartBeatMsgCmd)
}
}
Tôi không chắc chắn tôi làm theo. Tôi cần phải có Props định nghĩa trong nhận thức bởi vì tôi đang sử dụng đối số đến để xác định con đường cho heartBeatExpireWorkerRef mới được tạo của tôi và heartBeatAccepterRef. Vì vậy, tôi không nghĩ rằng tôi có thể có đạo cụ tiêm. – HappyCoder86
Vậy thì bạn cần tiêm chúng qua tin nhắn. Như cuối cùng, bạn có thể tiêm tên cho đứa trẻ thông qua tin nhắn và sau đó nhìn đứa trẻ với 'ActorSelection'. cái đó có giúp ích không? – agilesteel
Đó là âm thanh tốt, nhưng các Akka TestKit phép một diễn viên để làm cho diễn viên nhí? Tất cả các ví dụ tôi đã tìm thấy cho đến nay chỉ cho phép một diễn viên tương tác với các đầu dò thử nghiệm. Tôi đã không tìm thấy bất kỳ thử nghiệm mẫu nào mà một diễn viên được thử nghiệm tạo ra các diễn viên con. Bạn có biết nơi tôi có thể tìm thấy một ví dụ thử nghiệm như thế? – HappyCoder86