5
Tôi tự hỏi cách kinh điển là thử nghiệm xem một diễn viên đã dừng lại trong akka. Đây là một ví dụ về cách tôi hiện đang làm; Tôi lo rằng tôi sẽ làm phức tạp hơn.akka: làm thế nào để kiểm tra rằng một diễn viên đã được dừng lại
import akka.actor.{Terminated, Actor, Props, ActorSystem}
import akka.testkit.TestProbe
class MyActor extends Actor {
import MyActor._
override def receive: Receive = {
case Stop => context.stop(self)
}
}
object MyActor {
def props = Props(new MyActor)
case object Stop
}
object MyActorSpec {
val system = ActorSystem()
val myActor = system.actorOf(MyActor.props)
val testProbe = TestProbe()
case object MyActorStopped
val watcher = system.actorOf(Props(new Actor {
context.watch(myActor)
override def receive: Actor.Receive = {
case Terminated(`myActor`) => testProbe.ref ! MyActorStopped
}
}))
myActor ! MyActor.Stop
testProbe.expectMsg(MyActorStopped)
}
Tuyệt vời - Tôi đã hy vọng một điều như thế này. Không chắc chắn làm thế nào tôi bỏ lỡ nó Cheers. – Mullefa
Cũng muốn thêm, khi khó có được 'ActorRef' để chuyển sang phương thức' expectTerminated() ', ví dụ: ref đã được tạo dưới dạng con của một diễn viên khác, tôi thấy hữu ích khi thu thập ref đã bị dừng và thực hiện kiểm tra trên ví dụ: tên của nó: 'val msg = testProbe.expectMsgType [Terminated]; assert (msg.actor.path.name == "myActor") ' – Mullefa
Có điều gì sai khi sử dụng testActor thay vì testProbe không? 'this watch myActor' ' myActor! MyActor.Stop' 'expectTerminated (myActor)' –