为什么我的演员测试失败了?

时间:2016-09-18 05:02:53

标签: scala concurrency akka java-threads akka-testkit

我正在使用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社区对可能出现的问题的任何想法?

0 个答案:

没有答案