5
俳優がakkaで停止しているかどうかをテストするのが標準的な方法であると思います。ここに私が現在やっていることの例があります。私はそれを複雑にすることを心配しています。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
testProbeの代わりにtestActorを使用すると何か問題はありますか? 'この時計myActor' ' myActor! MyActor.Stop' 'expectTerminated(myActor)' –