1

Scala/Akkaで小さなテストをしています

"test test" in {

  val actor = TestActorRef(new Actor {
    override def receive: Receive = {
      case _ =>
        println("Inside actor " + context.parent)
        context.parent ! 42
    }
  })

  println("Self " + self)

  actor ! "Hello"

  expectMsg(42)
}

それが生成する出力は

Self Actor[akka://testSystem/system/testActor1#-1014751973]
Inside actor Actor[akka://testSystem/user]
(...)
assertion failed: timeout (3 seconds) during expectMsg while waiting for 42
java.lang.AssertionError: assertion failed: timeout (3 seconds) during expectMsg while waiting for 42

ログに表示されているcontext.parentように、アクターの内部が本当の親ではないのはなぜですか? testActor1(これは、サブジェクトを作成したときに親になると予想されるアクターです)。

もしその状態が予想されるなら - もしそうなら、なぜですか? そのようなアプローチの利点は見当たりません。

4

1 に答える 1

2

これが何であるかについては、2 つの可能性があります。明示的なスーパーバイザーを受け入れないコンパニオンのapplyメソッドの 1 つを呼び出すと、親がルート ガーディアンになります。明示的なスーパーバイザーを取るものを呼び出すと、親はあなたが提供するものになります。TestActorRefActorRefActorRef

于 2015-04-22T15:20:21.230 に答える