有两个参与者-ProducerActor
和ConsumerActor
。生产者具有一个调度程序,该调度程序向每个"Tick"
发送2000 ms
消息给自己。之后,生产者将"Hello"
消息发送给消费者:
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
中收到消息,则测试将声明错误。
例如:
"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 ---
我想出了以下对我来说很好的解决方案:
"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")
}
}
}
但是,如果有更好的解决方案来完成此任务,那么可以共享。