首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akka TestProbe测试context.watch() /终止处理

Akka TestProbe测试context.watch() /终止处理
EN

Stack Overflow用户
提问于 2014-05-30 04:02:59
回答 1查看 1.5K关注 0票数 4

我正在用TestKit测试一个akka系统。我正在测试的系统的一个参与者,在接收到特定的消息类型时,context.watch会将发送方关闭,并在发送方死亡时杀死自己:

代码语言:javascript
复制
trait Handler extends Actor {
    override def receive: Receive = {
        case Init => context.watch(sender)
        case Terminated => context.stop(self)
    }
}

在我的测试中

代码语言:javascript
复制
val probe = TestProbe(system)
val target = TestActorRef(Props(classOf[Handler]))
probe.send(target, Init)

现在,为了测试手表/终止的行为-我想模拟测试探针被杀死。

我能做到

代码语言:javascript
复制
probe.send(target, Terminated)

但是,这预先假定目标已经调用了context.watch(sender),否则它将不会接收终止。

我能做到

代码语言:javascript
复制
probe.testActor ! Kill

with不发送Terminated,除非target正确地调用了context.watch(sender),但我实际上不希望testprobe被杀死,因为它需要保持响应以测试是否(例如)目标继续发送消息而不是停止自身。

我现在遇到过几次这种情况,有什么正确的方法来测试一个演员是否正确地处理了上述情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-17 08:51:18

您可以通过一个单独的探测来观看被测试的演员终止,而不是试图通过“发送方”探测来完成这个任务:

代码语言:javascript
复制
val probe = TestProbe(system)
val deathWatcher = TestProbe(system)

val target = TestActorRef(Props(classOf[Handler]))
deathWatcher.watch(target)

probe.send(target, Init)
// TODO make sure the message is processed.. perhaps ack it?

probe ! Kill

deathWatcher.expectTerminated(target)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23946826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档