首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akka-testkit "future.isCompleted“检查

Akka-testkit "future.isCompleted“检查
EN

Stack Overflow用户
提问于 2013-05-17 20:08:34
回答 2查看 829关注 0票数 0

在本例中:

http://doc.akka.io/docs/akka/snapshot/java/testing.html

代码语言:javascript
复制
final Props props = Props.create(MyActor.class);
final TestActorRef<MyActor> ref = TestActorRef.create(system, props, "testB");
final Future<Object> future = akka.pattern.Patterns.ask(ref, "say42", 3000);
assertTrue(future.isCompleted());
assertEquals(42, Await.result(future, Duration.Zero()));

什么是:assertTrue(future.isCompleted());检查?返回false的方法是什么

编辑:

我找到了制作isCompleted() false的方法。我有false当我在演员课上没有什么可返回/tell回来

(但对我来说似乎很奇怪。这似乎是一种验证。能够让参与者返回某些特定类型的消息( ):

代码语言:javascript
复制
if( message instanceof PutConfigurationMessage) {

        PutConfigurationMessage putConfigurationMessage = (PutConfigurationMessage) message;

        initSomeConfigurations(putConfigurationMessage.getConfigurations());

        // here might be this line:  `getSender().tell(resultMessage, getSelf());`

}

现在的问题是:如果我不想返回/告诉任何东西,我该怎么办?有点“好吧”。没有例外那就没问题了?或者?

EN

回答 2

Stack Overflow用户

发布于 2013-05-17 20:31:46

在我看来,这段代码起初看上去不对。通常,将来在另一个线程上计算,当另一个线程计算完结果时,它就是completed。因此,断言未来的isCompleted在启动后立即启动,而无需等待它完成,这似乎是完全错误的。

但是,他们在您链接到的文档中解释的是,当使用TestActorRef时,未来将在同一个线程上计算。因此,当调用Pattern.ask()时计算未来,并且只有在该计算运行完之后,它才会转到下一行assert(future.isCompleted)。当使用TestActorRef时,这是正确的,但在真正的程序中则不是这样。

他们删除并发/多线程进行测试,因为由于多线程代码的不确定性,测试多线程代码几乎是不可能的。

票数 1
EN

Stack Overflow用户

发布于 2013-05-17 20:19:29

它断言future.isComplete()返回了一个"true“。如果它返回"false“就会失败。

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

https://stackoverflow.com/questions/16617090

复制
相关文章

相似问题

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