【问题标题】:Test actors: receive exactly N messages测试参与者:恰好收到 N 条消息
【发布时间】:2015-05-21 09:58:16
【问题描述】:

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

probe.expectMsg(20 seconds, Done)

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

【问题讨论】:

    标签: scala akka actor akka-testkit


    【解决方案1】:

    来自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)
    

    【讨论】:

    • 这并不是我所需要的。我想收到 10 条消息(不多也不少)。使用您的解决方案,当我收到少于 10 条消息时测试失败,但收到超过 10 条消息时测试通过。最后我找到了解决方案:我把 probe.expectNoMsg() 放在你的 expectMsgAllOf() 之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 2013-11-29
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多