akka/akka-core

ManualTime.expectNoMessageFor does not detect a message during specified period when it exists

开放

#28,772 创建于 2020年3月20日

 (1 条评论) (0 个反应) (0 位负责人)Scala (3,547 个派生)batch import
1 - triagedhelp wantedt:testingt:typed

仓库指标

星标
 (13,277 个星标)
PR 合并指标
 (PR 指标待抓取)

描述

I tried the example test case introduced in https://doc.akka.io/docs/akka/current/typed/testing-async.html#controlling-the-scheduler, even if I change the first call to manualTime.expectNoMessageFor from manualTime.expectNoMessageFor(9.millis, probe) to manualTime.expectNoMessageFor(11.millis, probe) or longer period, It still passes.

import scala.concurrent.duration._
import akka.actor.testkit.typed.scaladsl.ScalaTestWithActorTestKit
import akka.actor.testkit.typed.scaladsl.ManualTime
import akka.actor.testkit.typed.scaladsl.TestProbe
import akka.actor.testkit.typed.scaladsl.LogCapturing
import akka.actor.typed.scaladsl.Behaviors
import org.scalatest.wordspec.AnyWordSpecLike

class ManualTimerExampleSpec
    extends ScalaTestWithActorTestKit(ManualTime.config)
    with AnyWordSpecLike
    with LogCapturing {

  val manualTime: ManualTime = ManualTime()

  "A timer" must {
    "schedule non-repeated ticks" in {
      case object Tick
      case object Tock

      val probe = TestProbe[Tock.type]()
      val behavior = Behaviors.withTimers[Tick.type] { timer =>
        timer.startSingleTimer(Tick, 10.millis)
        Behaviors.receiveMessage { _ =>
          probe.ref ! Tock
          Behaviors.same
        }
      }

      spawn(behavior)

      manualTime.expectNoMessageFor(9.millis, probe)

      manualTime.timePasses(2.millis)
      probe.expectMessage(Tock)

      manualTime.expectNoMessageFor(10.seconds, probe)
    }
  }
}

贡献者指南