如何停止所有演员并等待他们终止?
How to stop all actors and wait for them to terminate?
我正在为我的 Akka 项目实施单元测试。为了避免 InvalidActorNameException
之类的情况,我希望在下一个单元测试 运行 之前停止在一个单元测试中创建的所有参与者。因此,对于在单元测试中创建的每个参与者,我在它的末尾调用 _system.stop(someActorRef)
。然而,一个 actor 真正停止需要一些时间,不幸的是,下一个单元测试通常在 运行ning 开始之前,在前一个中创建的 actor 实际上已经消失了。由于 stop
方法返回的 Future
和 awaitStop
方法都不可用,我真的不知道如何解决这个问题。目前我在每个单元测试结束时调用 Thread.sleep(1000)
并希望到那时所有演员都死了,但是,显然,我不能一直这样。 :D
如有任何提示,我将不胜感激!
你可以在测试结束时试试这个:
val probe = TestProbe()
probe.watch(someActorRef)
system.stop(someActorRef)
probe.expectMsgType[Terminated]
//another way
//probe.expectMsgPF() {
// case Terminated(someActorRef) =>
//}
我正在为我的 Akka 项目实施单元测试。为了避免 InvalidActorNameException
之类的情况,我希望在下一个单元测试 运行 之前停止在一个单元测试中创建的所有参与者。因此,对于在单元测试中创建的每个参与者,我在它的末尾调用 _system.stop(someActorRef)
。然而,一个 actor 真正停止需要一些时间,不幸的是,下一个单元测试通常在 运行ning 开始之前,在前一个中创建的 actor 实际上已经消失了。由于 stop
方法返回的 Future
和 awaitStop
方法都不可用,我真的不知道如何解决这个问题。目前我在每个单元测试结束时调用 Thread.sleep(1000)
并希望到那时所有演员都死了,但是,显然,我不能一直这样。 :D
如有任何提示,我将不胜感激!
你可以在测试结束时试试这个:
val probe = TestProbe()
probe.watch(someActorRef)
system.stop(someActorRef)
probe.expectMsgType[Terminated]
//another way
//probe.expectMsgPF() {
// case Terminated(someActorRef) =>
//}