【发布时间】:2019-04-13 10:31:14
【问题描述】:
在异步(类型化)actor 测试中,我必须确保在发送下一条消息之前,actor 已接收到特定消息。这是必要的,因为消息可以通过多个子actor到达被测actor(当直接发送消息时,无论如何都会保证顺序)。
由于 actor 可能只改变其内部状态,而不会向外界发出已收到消息的信号,因此我必须找到另一种方法等到消息处理完毕。
有没有办法等到所有收件箱都为空?我认为ManualTime.timePasses(0.seconds) 可以完成这项工作,但我不确定,它会大大减慢我的测试速度。显然我不想使用Thread.sleep(...),因为它并不能真正保证所有消息都被处理并且测试会更慢。
我还尝试使用BehaviorInterceptor 来确定主角何时收到消息,但这只有在我知道子演员发送给主角的消息时才有可能。这在测试中实际上应该是透明的,因此我正在寻找一种通用的方式来断言参与者已完成处理消息(因为我控制了调度程序,所以不会生成计时器消息)。
【问题讨论】:
标签: testing akka akka-testkit akka-typed