如何阻止所有演员并等待他们终止?

时间:2017-01-17 18:09:57

标签: scala concurrency akka actor

我正在为我的Akka项目实施单元测试。为了避免InvalidActorNameException等,我希望在下一个单元测试运行之前停止在一个单元测试中创建的所有actor。因此,对于在单元测试中创建的每个actor,我在其末尾调用_system.stop(someActorRef)。但是,演员实际停止需要一些时间,不幸的是,下一个单元测试通常在前一个演员创建的演员实际消失之前开始运行。由于Future方法既没有stop,也没有awaitStop方法,我真的不知道如何解决这个问题。目前我在每个单元测试结束时都会调用Thread.sleep(1000),希望所有演员在那时都死了,但是,显然,我不能保持这种状态。 :d

我很感激任何提示!

1 个答案:

答案 0 :(得分:1)

你可以在考试结束时试试这个:

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