2016-01-26 5 views
2

Учитывая, что у меня есть актер Supervisor, который вводится актером child, как отправить ребенка сообщение PoisonPill и проверить его с помощью TestKit?Akka Scala TestKit test PoisonPill message

Это мой Супервизор.

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

Я думаю, что это Testing Actor Systems должен ответить на ваш вопрос:

Watching Другие Актеры из пробников

TestProbe может зарегистрироваться для Deathwatch любого другого актера :

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

я использовал это, но потом в конце концов изменил свой код так, чтобы ребенок перестал себя, когда сделано. –

0

В тестовом примере, который расширяет прогрейте набор, вы можете использовать следующий код:

"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) 
    } 
}