我正在尝试获得类似的TestActorRef
class NotifySenderTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfter {
def this() = this(ActorSystem("NotifySenderTest"))
override def afterAll {
TestKit.shutdownActorSystem(system)
}
"A NotifySender" must {
"be able to process the required messages" in {
val actorRef = TestActorRef[NotifySender] //Line 92
}
}
这个演员
class NotifySender extends Actor with Stash {
import Tcp._
import context.system
def receive = {
[...]
}
}
但这让我留下了以下的堆栈跟踪
java.lang.NullPointerException:at akka.actor.dungeon.Dispatch $ class.init(Dispatch.scala:62)at akka.actor.ActorCell.init(ActorCell.scala:338)at akka.actor.LocalActorRef。(ActorRef.scala:304)at akka.testkit.TestActorRef。(TestActorRef.scala:21)at akka.testkit.TestActorRef $ .apply(TestActorRef.scala:141)at at akka.testkit.TestActorRef $ .apply(TestActorRef.scala:137)at at akka.testkit.TestActorRef $ .apply(TestActorRef.scala:146)at at akka.testkit.TestActorRef $ .apply(TestActorRef.scala:144)at at actor.NotifySenderTest $$ anonfun $ 2 $$ anonfun $ $应用MCV $ SP $ 4.适用$ MCV $ SP(NotifySenderTest.scala:92) 在 actor.NotifySenderTest $$ anonfun $ 2 $$ anonfun $ $应用MCV $ SP $ 4.适用(NotifySenderTest.scala:91) ...
编辑:这似乎与这个演员特别有关。将TestActorRef添加到另一个actor类是正常的。我读到TextActorRefs对于具有Stash特征的actor有问题,但据说这在当前版本中得到了解决。 (Reference)
Edit2:好的。我错了。目前的版本不是2.3。所以我要等了?!
答案 0 :(得分:1)
已确认升级至akka 2.3.0是使用TestActorRef
特征修复Stash
的正确答案。
答案 1 :(得分:0)
实例化actor:
val actorRef = TestActorRef(new NotifySender())
无论如何,我总是这样做。 :)