5
Мне интересно, каков ли канонический способ проверки того, остановился ли актер в акке. Вот пример того, как я сейчас это делаю; Я беспокоюсь, что я слишком усложняю это.akka: как проверить, что актер остановлен
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)
}
Отлично. Я надеялся на что-то подобное. Не знаю, как я пропустил это. – Mullefa
Также хотел бы добавить, когда трудно получить 'ActorRef', чтобы перейти к методу' expectTerminated() ', например. ref был создан как ребенок другого актера, я счел полезным захватить ref, который был остановлен, и выполнять проверки, например. это имя: 'val msg = testProbe.expectMsgType [Terminated]; assert (msg.actor.path.name == "myActor") ' – Mullefa
Есть ли что-то не так с использованием testActor вместо testProbe? 'this watch myActor' ' myActor! MyActor.Stop' 'expectTerminated (myActor)' –