创建TestActorRef会导致NullPointerException

时间:2014-02-12 10:39:14

标签: scala testing akka actor

我正在尝试获得类似的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。所以我要等了?!

2 个答案:

答案 0 :(得分:1)

已确认升级至akka 2.3.0是使用TestActorRef特征修复Stash的正确答案。

答案 1 :(得分:0)

实例化actor:

val actorRef = TestActorRef(new NotifySender())

无论如何,我总是这样做。 :)