Scala 测试参与者:只接收N条消息
我正在用Akka actors测试一个应用程序。我正在使用测试探针。我想验证探测器是否接收到10条相同类型的消息。一种解决方案是写10次: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个元素,测试不会失败。相反,我希望它在这种情况下失败。有解决方案吗?来自 与提供的对象数组大小匹配的多个对象 必须在给定的时间内收到
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)