在本例中:
http://doc.akka.io/docs/akka/snapshot/java/testing.html
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回来
(但对我来说似乎很奇怪。这似乎是一种验证。能够让参与者返回某些特定类型的消息( ):
if( message instanceof PutConfigurationMessage) {
PutConfigurationMessage putConfigurationMessage = (PutConfigurationMessage) message;
initSomeConfigurations(putConfigurationMessage.getConfigurations());
// here might be this line: `getSender().tell(resultMessage, getSelf());`
}现在的问题是:如果我不想返回/告诉任何东西,我该怎么办?有点“好吧”。没有例外那就没问题了?或者?
发布于 2013-05-17 20:31:46
在我看来,这段代码起初看上去不对。通常,将来在另一个线程上计算,当另一个线程计算完结果时,它就是completed。因此,断言未来的isCompleted在启动后立即启动,而无需等待它完成,这似乎是完全错误的。
但是,他们在您链接到的文档中解释的是,当使用TestActorRef时,未来将在同一个线程上计算。因此,当调用Pattern.ask()时计算未来,并且只有在该计算运行完之后,它才会转到下一行assert(future.isCompleted)。当使用TestActorRef时,这是正确的,但在真正的程序中则不是这样。
他们删除并发/多线程进行测试,因为由于多线程代码的不确定性,测试多线程代码几乎是不可能的。
发布于 2013-05-17 20:19:29
它断言future.isComplete()返回了一个"true“。如果它返回"false“就会失败。
https://stackoverflow.com/questions/16617090
复制相似问题