Акка Скала TestKit проверить сообщение PoisonPill
Учитывая, что у меня есть Supervisor
актер, который вводится с 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
2 ответа
Решение
Я думаю, что это тестирование Actor Systems должно ответить на ваш вопрос:
Смотреть других актеров из зондов
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)
}
}