Scala 测试参与者:只接收N条消息

Scala 测试参与者:只接收N条消息,scala,akka,actor,akka-testkit,Scala,Akka,Actor,Akka Testkit,我正在用Akka actors测试一个应用程序。我正在使用测试探针。我想验证探测器是否接收到10条相同类型的消息。一种解决方案是写10次: probe.expectMsg(20 seconds, Done) 但我更喜欢一个更通用的解决方案(例如,我还要测试我的应用程序是否为n=100)。 我还尝试了probe.receiveN(10,20秒),但如果我收到超过10个元素,测试不会失败。相反,我希望它在这种情况下失败。有解决方案吗?来自 与提供的对象数组大小匹配的多个对象 必须在给定的时间内收到

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

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

来自

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

然后使用
expectNoMsg(d:Duration)
确保所需的数字准确无误

使用您的代码:

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

这并不是我所需要的。我想要收到10条信息(不少于,不多于)。在您的解决方案中,当我收到少于10条消息时,测试失败,但它通过时收到>10条消息。最后我找到了解决方案:我将probe.expectNoMsg()放在您的expectMsgAllOf()之后。
val numberOfMessages = 10
probe.expectMsgAllOf(20 seconds, Array.fill(numberOfMessages)(Done))
probe.expectNoMsg(20 seconds)