测试演员:准确接收N条消息

时间:2015-05-21 09:58:17

标签: scala akka actor akka-testkit

我正在测试Akka演员的应用程序。我正在使用测试探针。我想验证探针是否正好收到10个相同类型的消息。一种解决方案可能是写10次:

probe.expectMsg(20 seconds, Done)

但我更喜欢更通用的解决方案(例如我也会测试我的应用程序n = 100)。 我也尝试过probe.receiveN(10,20秒)但是如果我收到超过10个元素,测试不会失败。相反,我希望它在这种情况下失败。有解决方案吗?

1 个答案:

答案 0 :(得分:3)

来自Akka Documentation:

expectMsgAllOf[T](d: Duration, obj: T*): Seq[T]
  

许多与提供的对象数组大小匹配的对象   必须在给定时间内收到,并且对于每一个给定的   对象中必须存在至少一个接收到的对象   等于(与==相比)它。接收对象的完整序列是   返回。

然后使用expectNoMsg(d: Duration)确保确实存在所需数量。

使用您的代码:

val numberOfMessages = 10
probe.expectMsgAllOf(20 seconds, Array.fill(numberOfMessages)(Done))
probe.expectNoMsg(20 seconds)