diff --git a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala index 1cbc3c9e041c..3b5b98f414b5 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala @@ -679,10 +679,18 @@ trait TestKitBase { elem = queue.peekFirst() } } - val diff = (max.toNanos - left.toNanos).nanos - val m = s"received unexpected message $elem after ${diff.toMillis} millis" - assert(elem eq null, m) - lastWasNoMsg = true + + if (elem ne null) { + // we pop the message, such that subsequent expectNoMessage calls can + // assert on the next period without a message + queue.pop() + + val diff = (max.toNanos - left.toNanos).nanos + val m = s"assertion failed: received unexpected message $elem after ${diff.toMillis} millis" + throw new java.lang.AssertionError(m) + } else { + lastWasNoMsg = true + } } /** diff --git a/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala b/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala index 84a2d4547b67..6cfb75ca15ce 100644 --- a/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/TestProbeSpec.scala @@ -1,15 +1,18 @@ package akka.testkit import language.postfixOps - import akka.actor._ -import scala.concurrent.{ Await } + +import scala.concurrent.Await import scala.concurrent.duration._ import akka.pattern.ask + import scala.util.Try import java.util.concurrent.atomic.AtomicInteger -class TestProbeSpec extends AkkaSpec with DefaultTimeout { +import org.scalatest.concurrent.Eventually + +class TestProbeSpec extends AkkaSpec with DefaultTimeout with Eventually { "A TestProbe" must { @@ -201,6 +204,18 @@ class TestProbeSpec extends AkkaSpec with DefaultTimeout { val probe = new TestProbe(system) probe.ref.path.name should startWith("testProbe") } + + "expectNoMessage should pull the thingy" in { + val p = new TestProbe(system) + + p.ref ! "nein" // no + p.ref ! "nie" // no + + eventually(p.expectNoMessage(100.millis)) + + p.ref ! "tak" // yes + p.expectMsg("tak") + } } }