如何等待 Scala Actor 退出()?我在一个单元测试中设置了两个 Actor,并发送了一些消息让它们开始。他们来回发送一些消息,最终都调用exit()。如何让我的单元测试在通过之前等待两个 Actor 完成?
问问题
1048 次
2 回答
7
如果您事先知道参与者之间交换的消息数量,则可以使用 ajava.util.concurrent.CountDownLatch
来跟踪消息数量。在actors中,每次处理完消息后,做
latch.countDown()
在你的主线程中做
latch.await()
这将使您的主线程等到锁存器的计数降至零。
如果您事先不知道消息的数量,但有一个指示完成的条件,那么您可以使用java.util.concurrent.locks.Condition
. 在演员中,当你的条件满足时,做
if (conditionSatisfied)
condition.signal()
在你的主线程中做
while (!conditionSatisfied)
condition.await()
让它等到条件满足。
CountDownLatch
有关详细信息,请参阅和的 javadocs Condition
。
有关使用的示例,请参见此要点Condition
。
于 2010-06-24T04:45:31.653 回答
2
在 Specs 中,您可以使用Ultimate Matchers。如果您知道您的参与者或它修改的任何实体(例如持久性存储)的最终状态,您可以强制测试等待,直到切换到该状态发生:
<entity state> must eventually(10, 1.second)(be(<state>)) // there will be 10 retires every second, and if the state will be different, exception is thrown
于 2010-06-24T10:29:29.840 回答