2
TestActorRef.apply()を使用してアクターを作成すると、Future内でactorSystem.actorSelection.resolveOne
を呼び出して解決できない場合があります。TestActorRefで作成されたアクターを時々解決できません
TestActorRefのドキュメントでは、シングルスレッド環境で使用できると言われていますが、次のテストが失敗する理由は何でしょうか。
アッカバージョン:失敗2.4.16
最小限のテスト、エラーakka.actor.ActorNotFound: Actor not found for: ActorSelection[Anchor(akka://test-system/), Path(/user/test-actor)]
で実行千回とします
import akka.actor.{Actor, ActorSystem, Props}
import akka.testkit.TestActorRef
import akka.util.Timeout
import org.junit.runner.RunWith
import org.scalatest._
import org.scalatest.junit.JUnitRunner
import scala.concurrent.Await
import scala.concurrent.duration._
@RunWith(classOf[JUnitRunner])
class TestActorRefTest extends FunSuite with Matchers with BeforeAndAfterAll {
implicit val actorSystem = ActorSystem("test-system")
implicit val timeout = Timeout.durationToTimeout(3.seconds)
override def afterAll(): Unit = actorSystem.terminate()
test("find just created actors") {
val actorRef = TestActorRef(Props(new TestActor()), "test-actor")
val timeout = Timeout.durationToTimeout(3.seconds)
val findFuture = actorSystem.actorSelection(actorRef.path).resolveOne()(timeout)
Await.result(findFuture, 10.seconds)
}
}
private class TestActor extends Actor {
override def receive: Receive = {
case _ =>
}
}
この例では、TestActorRefはエラーの代わりに使用されていません。 – Oleg
actorSelectionを使用してtestActorRefを表示しようとしているため、実際にはエラーの場所で使用されています。 – johanandren
doestが検索されていることは、使用されているわけではありません。 – Oleg