|
Akka/Scala example source code file (TestProbeSpec.scala)
The TestProbeSpec.scala Akka example source code
package akka.testkit
import language.postfixOps
import org.scalatest.WordSpec
import org.scalatest.Matchers
import org.scalatest.{ BeforeAndAfterEach, WordSpec }
import akka.actor._
import scala.concurrent.{ Future, Await }
import scala.concurrent.duration._
import akka.pattern.ask
import scala.util.Try
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
class TestProbeSpec extends AkkaSpec with DefaultTimeout {
"A TestProbe" must {
"reply to futures" in {
val tk = TestProbe()
val future = tk.ref ? "hello"
tk.expectMsg(0 millis, "hello") // TestActor runs on CallingThreadDispatcher
tk.lastMessage.sender ! "world"
future should be('completed)
Await.result(future, timeout.duration) should be("world")
}
"reply to messages" in {
val tk1 = TestProbe()
val tk2 = TestProbe()
tk1.ref.!("hello")(tk2.ref)
tk1.expectMsg(0 millis, "hello")
tk1.lastMessage.sender ! "world"
tk2.expectMsg(0 millis, "world")
}
"properly send and reply to messages" in {
val probe1 = TestProbe()
val probe2 = TestProbe()
probe1.send(probe2.ref, "hello")
probe2.expectMsg(0 millis, "hello")
probe2.lastMessage.sender ! "world"
probe1.expectMsg(0 millis, "some hint here", "world")
}
def assertFailureMessageContains(expectedHint: String)(block: ⇒ Unit) {
Try {
block
} match {
case scala.util.Failure(e: AssertionError) ⇒
if (!(e.getMessage contains expectedHint))
fail(s"failure message did not contain hint! Was: ${e.getMessage}, expected to contain $expectedHint")
case scala.util.Failure(oth) ⇒
fail(s"expected AssertionError but got: $oth")
case scala.util.Success(result) ⇒
fail(s"expected failure but got: $result")
}
}
"throw AssertionError containing hint in its message if max await time is exceeded" in {
val probe = TestProbe()
val hint = "some hint"
assertFailureMessageContains(hint) {
probe.expectMsg(0 millis, hint, "hello")
}
}
"throw AssertionError containing hint in its message if received message doesn't match" in {
val probe = TestProbe()
val hint = "some hint"
assertFailureMessageContains(hint) {
probe.ref ! "hello"
probe.expectMsg(0 millis, hint, "bye")
}
}
"have an AutoPilot" in {
//#autopilot
val probe = TestProbe()
probe.setAutoPilot(new TestActor.AutoPilot {
def run(sender: ActorRef, msg: Any): TestActor.AutoPilot =
msg match {
case "stop" ⇒ TestActor.NoAutoPilot
case x ⇒ testActor.tell(x, sender); TestActor.KeepRunning
}
})
//#autopilot
probe.ref ! "hallo"
probe.ref ! "welt"
probe.ref ! "stop"
expectMsg("hallo")
expectMsg("welt")
probe.expectMsg("hallo")
probe.expectMsg("welt")
probe.expectMsg("stop")
probe.ref ! "hallo"
probe.expectMsg("hallo")
testActor ! "end"
expectMsg("end") // verify that "hallo" did not get through
}
"be able to expect primitive types" in {
for (_ ← 1 to 7) testActor ! 42
expectMsgType[Int] should be(42)
expectMsgAnyClassOf(classOf[Int]) should be(42)
expectMsgAllClassOf(classOf[Int]) should be(Seq(42))
expectMsgAllConformingOf(classOf[Int]) should be(Seq(42))
expectMsgAllConformingOf(5 seconds, classOf[Int]) should be(Seq(42))
expectMsgAllClassOf(classOf[Int]) should be(Seq(42))
expectMsgAllClassOf(5 seconds, classOf[Int]) should be(Seq(42))
}
"be able to ignore primitive types" in {
ignoreMsg { case 42 ⇒ true }
testActor ! 42
testActor ! "pigdog"
expectMsg("pigdog")
}
"watch actors when queue non-empty" in {
val probe = TestProbe()
// deadLetters does not send Terminated
val target = system.actorOf(Props(new Actor {
def receive = Actor.emptyBehavior
}))
system.stop(target)
probe.ref ! "hello"
probe watch target
probe.expectMsg(1.seconds, "hello")
probe.expectMsg(1.seconds, Terminated(target)(false, false))
}
}
}
Other Akka source code examplesHere is a short list of links related to this Akka TestProbeSpec.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.