Rad*_*ian 11 testing scala akka
我有一些代码使用它的ActorPath而不是ActorRef向actor发送消息
system.actorSelection("/user/myActor") ! "a message"
Run Code Online (Sandbox Code Playgroud)
我需要确保此消息确实已发送.因此,我需要在我的测试中创建一个存在于此actor路径中的testProbe(或类似的东西),以便它接收这些消息.
val probe = TestProbe()
val system.actorOf(probe.ref, "myActor") // ??? I want to give my probe name and path
Run Code Online (Sandbox Code Playgroud)
我想出了一个不优雅的解决方案.
我定义了一个名为"ForwardActor"的助手actor
class ForwardActor(to: ActorRef) extends Actor {
def receive = {
case x => to.forward(x)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的测试用例中
val probe = TestProbe()
val system.actorOf(Props(new ForwardActor(probe.ref)), "myActor")
probe.expectMsg(...)
Run Code Online (Sandbox Code Playgroud)
硬编码演员路径可能会让你后来不高兴,因此你应该把它作为设计提示进行测试.我建议使用ActorRef作为第一选择,并且只有当不能使其工作时才回退到ActorPath,但是通过告诉actor使用哪个路径(在消息中或通过构造函数)来保持灵活性.