Akka Scala TestKit测试毒丸消息



鉴于我有一个注入了child演员的Supervisor演员,我如何向孩子发送毒丸消息并使用测试套件进行测试?

这是我的上级。

class Supervisor(child: ActorRef) extends Actor {
  ...
  child ! "hello"
  child ! PoisonPill
}

这是我的测试代码

val probe = TestProbe()
val supervisor = system.actorOf(Props(classOf[Supervisor], probe.ref))
probe.expectMsg("hello")
probe.expectMsg(PoisonPill)

问题是没有收到PoisonPill消息。可能是因为探测被PoisonPill消息终止?

断言失败,并显示

java.lang.AssertionError: assertion failed: timeout (3 seconds) 
during expectMsg while waiting for PoisonPill

我认为这个测试Actor系统应该回答你的问题:

从探针观看其他演员

TestProbe可以为自己注册任何其他参与者的DeathWatch:

val probe = TestProbe()
probe watch target
target ! PoisonPill
probe.expectTerminated(target)

在扩展测试工具包的测试用例中,可以使用以下代码:

"receives ShutDown" must {
  "sends PosionPill to other actor" in {
    val other = TestProbe("Other")
    val testee = TestActorRef(new Testee(actor.ref))
    testee ! Testee.ShutDown
    watch(other.ref)
    expectTerminated(other.ref)
  }
}

相关内容

  • 没有找到相关文章

最新更新