您可以为您的测试编写简单的助手,这些助手的名称与您的演员相似,但会将消息转发给您的探测器。
假设这是您的设置(简化):
case object M
case object X
class A extends Actor {
def receive = {
case M => context.system.actorSelection("/user/B") ! X
}
}
你想测试 actor A
。
您可以为您的应用编写这种“测试框架”:
object ForwardActor {
def props(to: ActorRef) = Props(new ForwardActor(to))
}
class ForwardActor(to: ActorRef) extends Actor {
override def receive = {
case x => to forward x
}
}
def mock(name: String, probe: TestProbe)(implicit system: ActorSystem): Unit =
system.actorOf(ForwardActor.props(probe.ref), name)
然后你就可以A
通过简单地做这种测试来测试actor:
"A sends X to B after receiving M" in {
val probeB = TestProbe()
mock("B", probeB)
system.actorOf(Props(new A)) ! M
probeB expectMsg X
}