Акка Скала 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)
  }
}
Другие вопросы по тегам