作为 Scala TestKit 测试 PoisonPill 消息
Akka Scala TestKit test PoisonPill message
鉴于我有一个 Supervisor
演员注入了 child
演员,我如何向 child 发送 PoisonPill 消息并使用 TestKit 测试它?
这是我的主管。
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
我认为这个 Testing Actor Systems 应该可以回答您的问题:
从探测器中观察其他演员
TestProbe 可以为任何其他参与者的 DeathWatch 注册自己:
val probe = TestProbe()
probe watch target
target ! PoisonPill
probe.expectTerminated(target)
在扩展testkit的测试用例中,可以使用如下代码:
"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)
}
}
鉴于我有一个 Supervisor
演员注入了 child
演员,我如何向 child 发送 PoisonPill 消息并使用 TestKit 测试它?
这是我的主管。
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
我认为这个 Testing Actor Systems 应该可以回答您的问题:
从探测器中观察其他演员
TestProbe 可以为任何其他参与者的 DeathWatch 注册自己:
val probe = TestProbe()
probe watch target
target ! PoisonPill
probe.expectTerminated(target)
在扩展testkit的测试用例中,可以使用如下代码:
"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)
}
}