2017-01-17 11 views
0

Я реализую модульные тесты для моего проекта Akka. Чтобы избежать InvalidActorNameException и т. Д., Я хочу, чтобы все участники, которые были созданы в рамках одного модульного теста, были остановлены до запуска следующего модульного теста. Итак, для каждого актера, созданного в рамках единичного теста, я вызываю _system.stop(someActorRef) в конце его. Однако для фактического прекращения действия актера требуется некоторое время, и, к сожалению, следующий единичный тест обычно запускается до того, как актеры, созданные в предыдущем, фактически исчезли. И так как нет Future, возвращаемого методом stop, а также не имеющегося метода awaitStop, я действительно не знаю, как это решить. В настоящее время я звоню Thread.sleep(1000) в конце каждого модульного теста и надеюсь, что к этому времени все актеры мертвы, но, очевидно, я не могу оставаться таким. : DКак остановить всех актеров и дождаться их окончания?

Буду признателен за любой намек!

ответ

1

Вы могли бы попробовать это в конце теста:

val probe = TestProbe() 
probe.watch(someActorRef) 
system.stop(someActorRef) 
probe.expectMsgType[Terminated] 
//another way 
//probe.expectMsgPF() { 
// case Terminated(someActorRef) => 
//} 
+0

Это выглядит действительно интересно, однако, он не компилируется: – lambdarookie

+0

'' '' 'отсутствует список аргументов для метода применяется в объекте Отменен [ error] Неприменимые методы только преобразуются в функции, когда ожидается тип функции. [error] Вы можете сделать это преобразование явным, написав 'apply _' или' apply (_) (_, _) 'вместо' apply'. [error] probe.expectMsg (Terminated (someActorRef)) '' '' – lambdarookie

+0

Я обновил свой ответ – kardapoltsev