我正在使用Akka 2.4.2与TestKit和Scalatest来编写和测试演员。每当我检查由我的演员封装的一些可变状态时,看起来就有竞争条件。我有一个非常简单的actor,可以在远程数据库中保存一些状态:
Server was unable to process request. ---> The authorization header is empty
DAO方法具有类型签名class MyActor(dao: MyDao) extends Actor {
var state: String = ""
def receive = {
case Set(str) =>
state = str
dao.save(state)
}
}
。对数据库的调用是异步的,是在设置dao.save(s:String): Future[String]
之后进行的,因此没有任何东西会阻止此字符串的赋值。演员伴随着单元测试:
state = str
如果我单独运行此测试,它将可靠地通过。但是,当我运行所有演员测试(我有十几个不同的演员)时,这个测试用例将非确定性地通过/失败。所以似乎有某种种族发生。我正在使用默认的Akka配置。 Akka社区对可能出现的问题的任何想法?