首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用akka-testkit测试延迟消息

用akka-testkit测试延迟消息
EN

Stack Overflow用户
提问于 2018-06-27 05:50:43
回答 1查看 507关注 0票数 0

有两个演员- ProducerActorConsumerActor。生产者有一个调度程序,它向自己发送"Tick"消息,每个2000 ms。在此之后,生产者向使用者发送"Hello"消息:

代码语言:javascript
复制
class ProducerActor(consumer: ActorRef) extends Actor {
    override def receive: Receive = {
      case "Tick" =>
          ...
          // some code which takes < 1 ms
          ...
          consumer ! "Hello"
    }

    override def preStart: Unit = 
      context.system
         .scheduler
         .schedule(2000 milliseconds, 2000 milliseconds, self, "Tick")
}

当消费者参与者收到每个2000 ms的"Hello“消息时,是否有可能测试这种情况?因此,如果在< 2000 ms> 2000 ms期间收到消息,则测试将断言错误。

例如:

代码语言:javascript
复制
"Consumer test" should {
    "receive message each 2000 ms" in {
       ...
       val consumer = TestProbe()
       val producer = system.actorOf(Props(new ProducerActor(consumer.ref))
       ...
       consumer.howToExpectDelayedMessage(minDelay = 2000 millis, "Hello")

    }
}

-- UPD --

我想出了以下对我有用的解决方案:

代码语言:javascript
复制
"Consumer test" should {
    "receive message each 2000 ms" in {

       val consumer = TestProbe()
       val producer = system.actorOf(Props(new ProducerActor(consumer.ref))

       // check the first ten periods
       (0 to 10) foreach { _ =>
         consumer.expectNoMsg(2000 millis)
         consumer.expectMsg("Hello")
       }

    }
}

但是,如果有一个更好的解决方案,这将是伟大的,如果你可以分享。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-12 09:22:15

您可以使用时间安排会议来完成这一任务。

某些事件不能立即发生(如计时器),其他事件必须在最后期限之前发生。因此,所有检查方法都必须在阳性或阴性结果范围内接受上限。

代码语言:javascript
复制
import akka.actor.Props
import scala.concurrent.duration._

val worker = system.actorOf(Props[Worker]())
within(200 millis) {
  worker ! "some work"
  expectMsg("some result")
  expectNoMessage() // will block for the rest of the 200ms
  Thread.sleep(300) // will NOT make this block fail
}

给定给is的块必须在一个介于min到最大值之间的持续时间之后完成,其中前者默认为零。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51055371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档