我設計應該派遣actorRef另一個演員在啓動前的演員:ActorRef是否通過system.actorOf獲得,等於這個actor中的self?
class MyActor(notifier: ActorRef) extends Actor {
override def preStart(): Unit = {
notifier ! Register(self)
}
...
}
case class Register(actor: ActorRef)
然後我寫了一個說明這個演員:
class MyActorSpec extends TestKit(ActorSystem("MyActorSpec"))
with ImplicitSender
with WordSpecLike
with Matchers
with BeforeAndAfterAll {
"MyActor" should {
val notifier = TestProbe()
"register itself in notifier" in {
val myActor = system.actorOf(Props(classOf[MyActor], notifier.ref))
notifier.expectMsg(Register(myActor))
}
}
}
當我運行我的測試,它會失敗並顯示以下消息:assertion failed: expected Register(Actor[akka://MyActorSpec/user/$b#1849780829]), found Register(Actor[akka://MyActorSpec/user/$a#1143150267])
因此,似乎在MyActor中通過self
獲取的ActorRef不等於在我的測試中通過system.actorOf
獲得的ActorRef。有什麼建議麼?由於構造函數需要一個ActorRef
val myActor = system.actorOf(Props(classOf[MyActor], notifier))
:
是的,在我的問題中實際上有notifier.ref,我已經糾正它。 –