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()'方法时,例如该裁判创建为另一个演员的孩子,我发现它有助于捕捉已停止的裁判,并对例如裁判进行检查。它的名字是:'valmsg = testProbe.expectMsgType [Terminated]; assert(msg.actor.path.name ==“myActor”)' – Mullefa
使用testActor而不是testProbe有什么问题吗? '这只手表myActor' 'myActor! MyActor.Stop' 'expectTerminated(myActor)' –