我正在使用 Akka 演员测试一个应用程序。我正在使用测试探针。我想验证探针是否接收到 10 条相同类型的消息。一种解决方案可能是写 10 次:
probe.expectMsg(20 seconds, Done)
但我更喜欢更通用的解决方案(例如,我也会针对 n=100 测试我的应用程序)。我也试过 probe.receiveN(10, 20 seconds) 但如果我收到超过 10 个元素,测试不会失败。相反,我希望它在这种情况下失败。有解决办法吗?
我正在使用 Akka 演员测试一个应用程序。我正在使用测试探针。我想验证探针是否接收到 10 条相同类型的消息。一种解决方案可能是写 10 次:
probe.expectMsg(20 seconds, Done)
但我更喜欢更通用的解决方案(例如,我也会针对 n=100 测试我的应用程序)。我也试过 probe.receiveN(10, 20 seconds) 但如果我收到超过 10 个元素,测试不会失败。相反,我希望它在这种情况下失败。有解决办法吗?
来自Akka 文档:
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)